Back to home page

OSCL-LXR

 
 

    


0001 /**********************************************************************
0002  * Author: Cavium, Inc.
0003  *
0004  * Contact: support@cavium.com
0005  *          Please include "LiquidIO" in the subject.
0006  *
0007  * Copyright (c) 2003-2016 Cavium, Inc.
0008  *
0009  * This file is free software; you can redistribute it and/or modify
0010  * it under the terms of the GNU General Public License, Version 2, as
0011  * published by the Free Software Foundation.
0012  *
0013  * This file is distributed in the hope that it will be useful, but
0014  * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
0015  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
0016  * NONINFRINGEMENT.  See the GNU General Public License for more details.
0017  ***********************************************************************/
0018 /*! \file cn23xx_regs.h
0019  * \brief Host Driver: Register Address and Register Mask values for
0020  * Octeon CN23XX devices.
0021  */
0022 
0023 #ifndef __CN23XX_PF_REGS_H__
0024 #define __CN23XX_PF_REGS_H__
0025 
0026 #define     CN23XX_CONFIG_VENDOR_ID 0x00
0027 #define     CN23XX_CONFIG_DEVICE_ID 0x02
0028 
0029 #define     CN23XX_CONFIG_XPANSION_BAR             0x38
0030 
0031 #define     CN23XX_CONFIG_MSIX_CAP         0x50
0032 #define     CN23XX_CONFIG_MSIX_LMSI        0x54
0033 #define     CN23XX_CONFIG_MSIX_UMSI        0x58
0034 #define     CN23XX_CONFIG_MSIX_MSIMD           0x5C
0035 #define     CN23XX_CONFIG_MSIX_MSIMM           0x60
0036 #define     CN23XX_CONFIG_MSIX_MSIMP           0x64
0037 
0038 #define     CN23XX_CONFIG_PCIE_CAP                 0x70
0039 #define     CN23XX_CONFIG_PCIE_DEVCAP              0x74
0040 #define     CN23XX_CONFIG_PCIE_DEVCTL              0x78
0041 #define     CN23XX_CONFIG_PCIE_LINKCAP             0x7C
0042 #define     CN23XX_CONFIG_PCIE_LINKCTL             0x80
0043 #define     CN23XX_CONFIG_PCIE_SLOTCAP             0x84
0044 #define     CN23XX_CONFIG_PCIE_SLOTCTL             0x88
0045 #define     CN23XX_CONFIG_PCIE_DEVCTL2             0x98
0046 #define     CN23XX_CONFIG_PCIE_LINKCTL2            0xA0
0047 #define     CN23XX_CONFIG_PCIE_UNCORRECT_ERR_MASK  0x108
0048 #define     CN23XX_CONFIG_PCIE_CORRECT_ERR_STATUS  0x110
0049 #define     CN23XX_CONFIG_PCIE_DEVCTL_MASK         0x00040000
0050 
0051 #define     CN23XX_PCIE_SRIOV_FDL          0x188
0052 #define     CN23XX_PCIE_SRIOV_FDL_BIT_POS      0x10
0053 #define     CN23XX_PCIE_SRIOV_FDL_MASK         0xFF
0054 
0055 #define     CN23XX_CONFIG_PCIE_FLTMSK              0x720
0056 
0057 #define     CN23XX_CONFIG_SRIOV_VFDEVID            0x190
0058 
0059 #define     CN23XX_CONFIG_SRIOV_BAR_START      0x19C
0060 #define     CN23XX_CONFIG_SRIOV_BARX(i)     \
0061         (CN23XX_CONFIG_SRIOV_BAR_START + ((i) * 4))
0062 #define     CN23XX_CONFIG_SRIOV_BAR_PF         0x08
0063 #define     CN23XX_CONFIG_SRIOV_BAR_64BIT      0x04
0064 #define     CN23XX_CONFIG_SRIOV_BAR_IO         0x01
0065 
0066 /* ##############  BAR0 Registers ################ */
0067 
0068 #define    CN23XX_SLI_CTL_PORT_START               0x286E0
0069 #define    CN23XX_PORT_OFFSET                      0x10
0070 
0071 #define    CN23XX_SLI_CTL_PORT(p)                  \
0072         (CN23XX_SLI_CTL_PORT_START + ((p) * CN23XX_PORT_OFFSET))
0073 
0074 /* 2 scatch registers (64-bit)  */
0075 #define    CN23XX_SLI_WINDOW_CTL                   0x282E0
0076 #define    CN23XX_SLI_SCRATCH1                     0x283C0
0077 #define    CN23XX_SLI_SCRATCH2                     0x283D0
0078 #define    CN23XX_SLI_WINDOW_CTL_DEFAULT           0x200000ULL
0079 
0080 /* 1 registers (64-bit)  - SLI_CTL_STATUS */
0081 #define    CN23XX_SLI_CTL_STATUS                   0x28570
0082 
0083 /* SLI Packet Input Jabber Register (64 bit register)
0084  * <31:0> for Byte count for limiting sizes of packet sizes
0085  * that are allowed for sli packet inbound packets.
0086  * the default value is 0xFA00(=64000).
0087  */
0088 #define    CN23XX_SLI_PKT_IN_JABBER                0x29170
0089 /* The input jabber is used to determine the TSO max size.
0090  * Due to H/W limitation, this need to be reduced to 60000
0091  * in order to to H/W TSO and avoid the WQE malfarmation
0092  * PKO_BUG_24989_WQE_LEN
0093  */
0094 #define    CN23XX_DEFAULT_INPUT_JABBER             0xEA60 /*60000*/
0095 
0096 #define    CN23XX_WIN_WR_ADDR_LO                   0x20000
0097 #define    CN23XX_WIN_WR_ADDR_HI                   0x20004
0098 #define    CN23XX_WIN_WR_ADDR64                    CN23XX_WIN_WR_ADDR_LO
0099 
0100 #define    CN23XX_WIN_RD_ADDR_LO                   0x20010
0101 #define    CN23XX_WIN_RD_ADDR_HI                   0x20014
0102 #define    CN23XX_WIN_RD_ADDR64                    CN23XX_WIN_RD_ADDR_LO
0103 
0104 #define    CN23XX_WIN_WR_DATA_LO                   0x20020
0105 #define    CN23XX_WIN_WR_DATA_HI                   0x20024
0106 #define    CN23XX_WIN_WR_DATA64                    CN23XX_WIN_WR_DATA_LO
0107 
0108 #define    CN23XX_WIN_RD_DATA_LO                   0x20040
0109 #define    CN23XX_WIN_RD_DATA_HI                   0x20044
0110 #define    CN23XX_WIN_RD_DATA64                    CN23XX_WIN_RD_DATA_LO
0111 
0112 #define    CN23XX_WIN_WR_MASK_LO                   0x20030
0113 #define    CN23XX_WIN_WR_MASK_HI                   0x20034
0114 #define    CN23XX_WIN_WR_MASK_REG                  CN23XX_WIN_WR_MASK_LO
0115 #define    CN23XX_SLI_MAC_CREDIT_CNT               0x23D70
0116 
0117 /* 4 registers (64-bit) for mapping IOQs to MACs(PEMs)-
0118  * SLI_PKT_MAC(0..3)_PF(0..1)_RINFO
0119  */
0120 #define    CN23XX_SLI_PKT_MAC_RINFO_START64       0x29030
0121 
0122 /*1 register (64-bit) to determine whether IOQs are in reset. */
0123 #define    CN23XX_SLI_PKT_IOQ_RING_RST            0x291E0
0124 
0125 /* Each Input Queue register is at a 16-byte Offset in BAR0 */
0126 #define    CN23XX_IQ_OFFSET                       0x20000
0127 
0128 #define    CN23XX_MAC_RINFO_OFFSET                0x20
0129 #define    CN23XX_PF_RINFO_OFFSET                 0x10
0130 
0131 #define CN23XX_SLI_PKT_MAC_RINFO64(mac, pf)     \
0132         (CN23XX_SLI_PKT_MAC_RINFO_START64 +     \
0133          ((mac) * CN23XX_MAC_RINFO_OFFSET) +    \
0134          ((pf) * CN23XX_PF_RINFO_OFFSET))
0135 
0136 /** mask for total rings, setting TRS to base */
0137 #define    CN23XX_PKT_MAC_CTL_RINFO_TRS               BIT_ULL(16)
0138 /** mask for starting ring number: setting SRN <6:0> = 0x7F */
0139 #define    CN23XX_PKT_MAC_CTL_RINFO_SRN               (0x7F)
0140 
0141 /* Starting bit of the TRS field in CN23XX_SLI_PKT_MAC_RINFO64 register */
0142 #define    CN23XX_PKT_MAC_CTL_RINFO_TRS_BIT_POS     16
0143 /* Starting bit of SRN field in CN23XX_SLI_PKT_MAC_RINFO64 register */
0144 #define    CN23XX_PKT_MAC_CTL_RINFO_SRN_BIT_POS     0
0145 /* Starting bit of RPVF field in CN23XX_SLI_PKT_MAC_RINFO64 register */
0146 #define    CN23XX_PKT_MAC_CTL_RINFO_RPVF_BIT_POS     32
0147 /* Starting bit of NVFS field in CN23XX_SLI_PKT_MAC_RINFO64 register */
0148 #define    CN23XX_PKT_MAC_CTL_RINFO_NVFS_BIT_POS     48
0149 
0150 /*###################### REQUEST QUEUE #########################*/
0151 
0152 /* 64 registers for Input Queue Instr Count - SLI_PKT_IN_DONE0_CNTS */
0153 #define    CN23XX_SLI_IQ_INSTR_COUNT_START64     0x10040
0154 
0155 /* 64 registers for Input Queues Start Addr - SLI_PKT0_INSTR_BADDR */
0156 #define    CN23XX_SLI_IQ_BASE_ADDR_START64       0x10010
0157 
0158 /* 64 registers for Input Doorbell - SLI_PKT0_INSTR_BAOFF_DBELL */
0159 #define    CN23XX_SLI_IQ_DOORBELL_START          0x10020
0160 
0161 /* 64 registers for Input Queue size - SLI_PKT0_INSTR_FIFO_RSIZE */
0162 #define    CN23XX_SLI_IQ_SIZE_START              0x10030
0163 
0164 /* 64 registers (64-bit) - ES, RO, NS, Arbitration for Input Queue Data &
0165  * gather list fetches. SLI_PKT(0..63)_INPUT_CONTROL.
0166  */
0167 #define    CN23XX_SLI_IQ_PKT_CONTROL_START64    0x10000
0168 
0169 /*------- Request Queue Macros ---------*/
0170 #define    CN23XX_SLI_IQ_PKT_CONTROL64(iq)          \
0171         (CN23XX_SLI_IQ_PKT_CONTROL_START64 + ((iq) * CN23XX_IQ_OFFSET))
0172 
0173 #define    CN23XX_SLI_IQ_BASE_ADDR64(iq)          \
0174         (CN23XX_SLI_IQ_BASE_ADDR_START64 + ((iq) * CN23XX_IQ_OFFSET))
0175 
0176 #define    CN23XX_SLI_IQ_SIZE(iq)                 \
0177         (CN23XX_SLI_IQ_SIZE_START + ((iq) * CN23XX_IQ_OFFSET))
0178 
0179 #define    CN23XX_SLI_IQ_DOORBELL(iq)             \
0180         (CN23XX_SLI_IQ_DOORBELL_START + ((iq) * CN23XX_IQ_OFFSET))
0181 
0182 #define    CN23XX_SLI_IQ_INSTR_COUNT64(iq)          \
0183         (CN23XX_SLI_IQ_INSTR_COUNT_START64 + ((iq) * CN23XX_IQ_OFFSET))
0184 
0185 /*------------------ Masks ----------------*/
0186 #define    CN23XX_PKT_INPUT_CTL_VF_NUM                  BIT_ULL(32)
0187 #define    CN23XX_PKT_INPUT_CTL_MAC_NUM                 BIT(29)
0188 /* Number of instructions to be read in one MAC read request.
0189  * setting to Max value(4)
0190  */
0191 #define    CN23XX_PKT_INPUT_CTL_RDSIZE                  (3 << 25)
0192 #define    CN23XX_PKT_INPUT_CTL_IS_64B                  BIT(24)
0193 #define    CN23XX_PKT_INPUT_CTL_RST                     BIT(23)
0194 #define    CN23XX_PKT_INPUT_CTL_QUIET                   BIT(28)
0195 #define    CN23XX_PKT_INPUT_CTL_RING_ENB                BIT(22)
0196 #define    CN23XX_PKT_INPUT_CTL_DATA_NS                 BIT(8)
0197 #define    CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP        BIT(6)
0198 #define    CN23XX_PKT_INPUT_CTL_DATA_RO                 BIT(5)
0199 #define    CN23XX_PKT_INPUT_CTL_USE_CSR                 BIT(4)
0200 #define    CN23XX_PKT_INPUT_CTL_GATHER_NS               BIT(3)
0201 #define    CN23XX_PKT_INPUT_CTL_GATHER_ES_64B_SWAP      (2)
0202 #define    CN23XX_PKT_INPUT_CTL_GATHER_RO               (1)
0203 
0204 /** Rings per Virtual Function **/
0205 #define    CN23XX_PKT_INPUT_CTL_RPVF_MASK               (0x3F)
0206 #define    CN23XX_PKT_INPUT_CTL_RPVF_POS                (48)
0207 /** These bits[47:44] select the Physical function number within the MAC */
0208 #define    CN23XX_PKT_INPUT_CTL_PF_NUM_MASK             (0x7)
0209 #define    CN23XX_PKT_INPUT_CTL_PF_NUM_POS              (45)
0210 /** These bits[43:32] select the function number within the PF */
0211 #define    CN23XX_PKT_INPUT_CTL_VF_NUM_MASK             (0x1FFF)
0212 #define    CN23XX_PKT_INPUT_CTL_VF_NUM_POS              (32)
0213 #define    CN23XX_PKT_INPUT_CTL_MAC_NUM_MASK            (0x3)
0214 #define    CN23XX_PKT_INPUT_CTL_MAC_NUM_POS             (29)
0215 #define    CN23XX_PKT_IN_DONE_WMARK_MASK                (0xFFFFULL)
0216 #define    CN23XX_PKT_IN_DONE_WMARK_BIT_POS             (32)
0217 #define    CN23XX_PKT_IN_DONE_CNT_MASK                  (0x00000000FFFFFFFFULL)
0218 
0219 #ifdef __LITTLE_ENDIAN_BITFIELD
0220 #define    CN23XX_PKT_INPUT_CTL_MASK                \
0221         (CN23XX_PKT_INPUT_CTL_RDSIZE        |   \
0222          CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP  |   \
0223          CN23XX_PKT_INPUT_CTL_USE_CSR)
0224 #else
0225 #define    CN23XX_PKT_INPUT_CTL_MASK                \
0226         (CN23XX_PKT_INPUT_CTL_RDSIZE        |   \
0227          CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP  |   \
0228          CN23XX_PKT_INPUT_CTL_USE_CSR       |   \
0229          CN23XX_PKT_INPUT_CTL_GATHER_ES_64B_SWAP)
0230 #endif
0231 
0232 /** Masks for SLI_PKT_IN_DONE(0..63)_CNTS Register */
0233 #define    CN23XX_IN_DONE_CNTS_PI_INT               BIT_ULL(62)
0234 #define    CN23XX_IN_DONE_CNTS_CINT_ENB             BIT_ULL(48)
0235 
0236 /*############################ OUTPUT QUEUE #########################*/
0237 
0238 /* 64 registers for Output queue control - SLI_PKT(0..63)_OUTPUT_CONTROL */
0239 #define    CN23XX_SLI_OQ_PKT_CONTROL_START       0x10050
0240 
0241 /* 64 registers for Output queue buffer and info size - SLI_PKT0_OUT_SIZE */
0242 #define    CN23XX_SLI_OQ0_BUFF_INFO_SIZE         0x10060
0243 
0244 /* 64 registers for Output Queue Start Addr - SLI_PKT0_SLIST_BADDR */
0245 #define    CN23XX_SLI_OQ_BASE_ADDR_START64       0x10070
0246 
0247 /* 64 registers for Output Queue Packet Credits - SLI_PKT0_SLIST_BAOFF_DBELL */
0248 #define    CN23XX_SLI_OQ_PKT_CREDITS_START       0x10080
0249 
0250 /* 64 registers for Output Queue size - SLI_PKT0_SLIST_FIFO_RSIZE */
0251 #define    CN23XX_SLI_OQ_SIZE_START              0x10090
0252 
0253 /* 64 registers for Output Queue Packet Count - SLI_PKT0_CNTS */
0254 #define    CN23XX_SLI_OQ_PKT_SENT_START          0x100B0
0255 
0256 /* 64 registers for Output Queue INT Levels - SLI_PKT0_INT_LEVELS */
0257 #define    CN23XX_SLI_OQ_PKT_INT_LEVELS_START64   0x100A0
0258 
0259 /* Each Output Queue register is at a 16-byte Offset in BAR0 */
0260 #define    CN23XX_OQ_OFFSET                      0x20000
0261 
0262 /* 1 (64-bit register) for Output Queue backpressure across all rings. */
0263 #define    CN23XX_SLI_OQ_WMARK                   0x29180
0264 
0265 /* Global pkt control register */
0266 #define    CN23XX_SLI_GBL_CONTROL                0x29210
0267 
0268 /* Backpressure enable register for PF0  */
0269 #define    CN23XX_SLI_OUT_BP_EN_W1S              0x29260
0270 
0271 /* Backpressure enable register for PF1  */
0272 #define    CN23XX_SLI_OUT_BP_EN2_W1S             0x29270
0273 
0274 /* Backpressure disable register for PF0  */
0275 #define    CN23XX_SLI_OUT_BP_EN_W1C              0x29280
0276 
0277 /* Backpressure disable register for PF1  */
0278 #define    CN23XX_SLI_OUT_BP_EN2_W1C             0x29290
0279 
0280 /*------- Output Queue Macros ---------*/
0281 
0282 #define    CN23XX_SLI_OQ_PKT_CONTROL(oq)          \
0283         (CN23XX_SLI_OQ_PKT_CONTROL_START + ((oq) * CN23XX_OQ_OFFSET))
0284 
0285 #define    CN23XX_SLI_OQ_BASE_ADDR64(oq)          \
0286         (CN23XX_SLI_OQ_BASE_ADDR_START64 + ((oq) * CN23XX_OQ_OFFSET))
0287 
0288 #define    CN23XX_SLI_OQ_SIZE(oq)                 \
0289         (CN23XX_SLI_OQ_SIZE_START + ((oq) * CN23XX_OQ_OFFSET))
0290 
0291 #define    CN23XX_SLI_OQ_BUFF_INFO_SIZE(oq)                 \
0292         (CN23XX_SLI_OQ0_BUFF_INFO_SIZE + ((oq) * CN23XX_OQ_OFFSET))
0293 
0294 #define    CN23XX_SLI_OQ_PKTS_SENT(oq)            \
0295         (CN23XX_SLI_OQ_PKT_SENT_START + ((oq) * CN23XX_OQ_OFFSET))
0296 
0297 #define    CN23XX_SLI_OQ_PKTS_CREDIT(oq)          \
0298         (CN23XX_SLI_OQ_PKT_CREDITS_START + ((oq) * CN23XX_OQ_OFFSET))
0299 
0300 #define    CN23XX_SLI_OQ_PKT_INT_LEVELS(oq)     \
0301         (CN23XX_SLI_OQ_PKT_INT_LEVELS_START64 + \
0302          ((oq) * CN23XX_OQ_OFFSET))
0303 
0304 /*Macro's for accessing CNT and TIME separately from INT_LEVELS*/
0305 #define    CN23XX_SLI_OQ_PKT_INT_LEVELS_CNT(oq)     \
0306         (CN23XX_SLI_OQ_PKT_INT_LEVELS_START64 + \
0307          ((oq) * CN23XX_OQ_OFFSET))
0308 
0309 #define    CN23XX_SLI_OQ_PKT_INT_LEVELS_TIME(oq)    \
0310         (CN23XX_SLI_OQ_PKT_INT_LEVELS_START64 + \
0311          ((oq) * CN23XX_OQ_OFFSET) + 4)
0312 
0313 /*------------------ Masks ----------------*/
0314 #define    CN23XX_PKT_OUTPUT_CTL_TENB                  BIT(13)
0315 #define    CN23XX_PKT_OUTPUT_CTL_CENB                  BIT(12)
0316 #define    CN23XX_PKT_OUTPUT_CTL_IPTR                  BIT(11)
0317 #define    CN23XX_PKT_OUTPUT_CTL_ES                    BIT(9)
0318 #define    CN23XX_PKT_OUTPUT_CTL_NSR                   BIT(8)
0319 #define    CN23XX_PKT_OUTPUT_CTL_ROR                   BIT(7)
0320 #define    CN23XX_PKT_OUTPUT_CTL_DPTR                  BIT(6)
0321 #define    CN23XX_PKT_OUTPUT_CTL_BMODE                 BIT(5)
0322 #define    CN23XX_PKT_OUTPUT_CTL_ES_P                  BIT(3)
0323 #define    CN23XX_PKT_OUTPUT_CTL_NSR_P                 BIT(2)
0324 #define    CN23XX_PKT_OUTPUT_CTL_ROR_P                 BIT(1)
0325 #define    CN23XX_PKT_OUTPUT_CTL_RING_ENB              BIT(0)
0326 
0327 /*######################### Mailbox Reg Macros ########################*/
0328 #define    CN23XX_SLI_PKT_MBOX_INT_START             0x10210
0329 #define    CN23XX_SLI_PKT_PF_VF_MBOX_SIG_START       0x10200
0330 #define    CN23XX_SLI_MAC_PF_MBOX_INT_START          0x27380
0331 
0332 #define    CN23XX_SLI_MBOX_OFFSET            0x20000
0333 #define    CN23XX_SLI_MBOX_SIG_IDX_OFFSET        0x8
0334 
0335 #define    CN23XX_SLI_PKT_MBOX_INT(q)          \
0336         (CN23XX_SLI_PKT_MBOX_INT_START + ((q) * CN23XX_SLI_MBOX_OFFSET))
0337 
0338 #define    CN23XX_SLI_PKT_PF_VF_MBOX_SIG(q, idx)        \
0339         (CN23XX_SLI_PKT_PF_VF_MBOX_SIG_START +      \
0340          ((q) * CN23XX_SLI_MBOX_OFFSET +        \
0341           (idx) * CN23XX_SLI_MBOX_SIG_IDX_OFFSET))
0342 
0343 #define    CN23XX_SLI_MAC_PF_MBOX_INT(mac, pf)      \
0344         (CN23XX_SLI_MAC_PF_MBOX_INT_START + \
0345          ((mac) * CN23XX_MAC_INT_OFFSET +   \
0346           (pf) * CN23XX_PF_INT_OFFSET))
0347 
0348 /*######################### DMA Counters #########################*/
0349 
0350 /* 2 registers (64-bit) - DMA Count - 1 for each DMA counter 0/1. */
0351 #define    CN23XX_DMA_CNT_START                   0x28400
0352 
0353 /* 2 registers (64-bit) - DMA Timer 0/1, contains DMA timer values */
0354 /* SLI_DMA_0_TIM */
0355 #define    CN23XX_DMA_TIM_START                   0x28420
0356 
0357 /* 2 registers (64-bit) - DMA count & Time Interrupt threshold -
0358  * SLI_DMA_0_INT_LEVEL
0359  */
0360 #define    CN23XX_DMA_INT_LEVEL_START             0x283E0
0361 
0362 /* Each DMA register is at a 16-byte Offset in BAR0 */
0363 #define    CN23XX_DMA_OFFSET                      0x10
0364 
0365 /*---------- DMA Counter Macros ---------*/
0366 #define    CN23XX_DMA_CNT(dq)                      \
0367         (CN23XX_DMA_CNT_START + ((dq) * CN23XX_DMA_OFFSET))
0368 
0369 #define    CN23XX_DMA_INT_LEVEL(dq)                \
0370         (CN23XX_DMA_INT_LEVEL_START + ((dq) * CN23XX_DMA_OFFSET))
0371 
0372 #define    CN23XX_DMA_PKT_INT_LEVEL(dq)            \
0373         (CN23XX_DMA_INT_LEVEL_START + ((dq) * CN23XX_DMA_OFFSET))
0374 
0375 #define    CN23XX_DMA_TIME_INT_LEVEL(dq)           \
0376         (CN23XX_DMA_INT_LEVEL_START + 4 + ((dq) * CN23XX_DMA_OFFSET))
0377 
0378 #define    CN23XX_DMA_TIM(dq)                     \
0379         (CN23XX_DMA_TIM_START + ((dq) * CN23XX_DMA_OFFSET))
0380 
0381 /*######################## MSIX TABLE #########################*/
0382 
0383 #define CN23XX_MSIX_TABLE_ADDR_START        0x0
0384 #define CN23XX_MSIX_TABLE_DATA_START        0x8
0385 
0386 #define CN23XX_MSIX_TABLE_SIZE          0x10
0387 #define CN23XX_MSIX_TABLE_ENTRIES       0x41
0388 
0389 #define CN23XX_MSIX_ENTRY_VECTOR_CTL    BIT_ULL(32)
0390 
0391 #define CN23XX_MSIX_TABLE_ADDR(idx)     \
0392     (CN23XX_MSIX_TABLE_ADDR_START + ((idx) * CN23XX_MSIX_TABLE_SIZE))
0393 
0394 #define CN23XX_MSIX_TABLE_DATA(idx)     \
0395     (CN23XX_MSIX_TABLE_DATA_START + ((idx) * CN23XX_MSIX_TABLE_SIZE))
0396 
0397 /*######################## INTERRUPTS #########################*/
0398 #define CN23XX_MAC_INT_OFFSET   0x20
0399 #define CN23XX_PF_INT_OFFSET    0x10
0400 
0401 /* 1 register (64-bit) for Interrupt Summary */
0402 #define    CN23XX_SLI_INT_SUM64            0x27000
0403 
0404 /* 4 registers (64-bit) for Interrupt Enable for each Port */
0405 #define    CN23XX_SLI_INT_ENB64            0x27080
0406 
0407 #define    CN23XX_SLI_MAC_PF_INT_SUM64(mac, pf)         \
0408         (CN23XX_SLI_INT_SUM64 +             \
0409          ((mac) * CN23XX_MAC_INT_OFFSET) +      \
0410          ((pf) * CN23XX_PF_INT_OFFSET))
0411 
0412 #define    CN23XX_SLI_MAC_PF_INT_ENB64(mac, pf)     \
0413         (CN23XX_SLI_INT_ENB64 +         \
0414          ((mac) * CN23XX_MAC_INT_OFFSET) +  \
0415          ((pf) * CN23XX_PF_INT_OFFSET))
0416 
0417 /* 1 register (64-bit) to indicate which Output Queue reached pkt threshold */
0418 #define    CN23XX_SLI_PKT_CNT_INT                0x29130
0419 
0420 /* 1 register (64-bit) to indicate which Output Queue reached time threshold */
0421 #define    CN23XX_SLI_PKT_TIME_INT               0x29140
0422 
0423 /*------------------ Interrupt Masks ----------------*/
0424 
0425 #define    CN23XX_INTR_PO_INT           BIT_ULL(63)
0426 #define    CN23XX_INTR_PI_INT           BIT_ULL(62)
0427 #define    CN23XX_INTR_MBOX_INT         BIT_ULL(61)
0428 #define    CN23XX_INTR_RESEND           BIT_ULL(60)
0429 
0430 #define    CN23XX_INTR_CINT_ENB                 BIT_ULL(48)
0431 #define    CN23XX_INTR_MBOX_ENB                 BIT(0)
0432 
0433 #define    CN23XX_INTR_RML_TIMEOUT_ERR           (1)
0434 
0435 #define    CN23XX_INTR_MIO_INT                   BIT(1)
0436 
0437 #define    CN23XX_INTR_RESERVED1                 (3 << 2)
0438 
0439 #define    CN23XX_INTR_PKT_COUNT                 BIT(4)
0440 #define    CN23XX_INTR_PKT_TIME                  BIT(5)
0441 
0442 #define    CN23XX_INTR_RESERVED2                 (3 << 6)
0443 
0444 #define    CN23XX_INTR_M0UPB0_ERR                BIT(8)
0445 #define    CN23XX_INTR_M0UPWI_ERR                BIT(9)
0446 #define    CN23XX_INTR_M0UNB0_ERR                BIT(10)
0447 #define    CN23XX_INTR_M0UNWI_ERR                BIT(11)
0448 
0449 #define    CN23XX_INTR_RESERVED3                 (0xFFFFFULL << 12)
0450 
0451 #define    CN23XX_INTR_DMA0_FORCE                BIT_ULL(32)
0452 #define    CN23XX_INTR_DMA1_FORCE                BIT_ULL(33)
0453 
0454 #define    CN23XX_INTR_DMA0_COUNT                BIT_ULL(34)
0455 #define    CN23XX_INTR_DMA1_COUNT                BIT_ULL(35)
0456 
0457 #define    CN23XX_INTR_DMA0_TIME                 BIT_ULL(36)
0458 #define    CN23XX_INTR_DMA1_TIME                 BIT_ULL(37)
0459 
0460 #define    CN23XX_INTR_RESERVED4                 (0x7FFFFULL << 38)
0461 
0462 #define    CN23XX_INTR_VF_MBOX                   BIT_ULL(57)
0463 #define    CN23XX_INTR_DMAVF_ERR                 BIT_ULL(58)
0464 #define    CN23XX_INTR_DMAPF_ERR                 BIT_ULL(59)
0465 
0466 #define    CN23XX_INTR_PKTVF_ERR                 BIT_ULL(60)
0467 #define    CN23XX_INTR_PKTPF_ERR                 BIT_ULL(61)
0468 #define    CN23XX_INTR_PPVF_ERR                  BIT_ULL(62)
0469 #define    CN23XX_INTR_PPPF_ERR                  BIT_ULL(63)
0470 
0471 #define    CN23XX_INTR_DMA0_DATA                 (CN23XX_INTR_DMA0_TIME)
0472 #define    CN23XX_INTR_DMA1_DATA                 (CN23XX_INTR_DMA1_TIME)
0473 
0474 #define    CN23XX_INTR_DMA_DATA                  \
0475         (CN23XX_INTR_DMA0_DATA | CN23XX_INTR_DMA1_DATA)
0476 
0477 /* By fault only TIME based */
0478 #define    CN23XX_INTR_PKT_DATA                  (CN23XX_INTR_PKT_TIME)
0479 /* For both COUNT and TIME based */
0480 /* #define    CN23XX_INTR_PKT_DATA                  \
0481  * (CN23XX_INTR_PKT_COUNT | CN23XX_INTR_PKT_TIME)
0482  */
0483 
0484 /* Sum of interrupts for all PCI-Express Data Interrupts */
0485 #define    CN23XX_INTR_PCIE_DATA                 \
0486         (CN23XX_INTR_DMA_DATA | CN23XX_INTR_PKT_DAT)
0487 
0488 /* Sum of interrupts for error events */
0489 #define    CN23XX_INTR_ERR          \
0490         (CN23XX_INTR_M0UPB0_ERR |   \
0491          CN23XX_INTR_M0UPWI_ERR |   \
0492          CN23XX_INTR_M0UNB0_ERR |   \
0493          CN23XX_INTR_M0UNWI_ERR |   \
0494          CN23XX_INTR_DMAVF_ERR  |   \
0495          CN23XX_INTR_DMAPF_ERR  |   \
0496          CN23XX_INTR_PKTPF_ERR  |   \
0497          CN23XX_INTR_PPPF_ERR   |   \
0498          CN23XX_INTR_PPVF_ERR)
0499 
0500 /* Programmed Mask for Interrupt Sum */
0501 #define    CN23XX_INTR_MASK         \
0502         (CN23XX_INTR_DMA_DATA   |   \
0503          CN23XX_INTR_DMA0_FORCE |   \
0504          CN23XX_INTR_DMA1_FORCE |   \
0505          CN23XX_INTR_MIO_INT    |   \
0506          CN23XX_INTR_ERR)
0507 
0508 /* 4 Registers (64 - bit) */
0509 #define    CN23XX_SLI_S2M_PORT_CTL_START         0x23D80
0510 #define    CN23XX_SLI_S2M_PORTX_CTL(port)   \
0511         (CN23XX_SLI_S2M_PORT_CTL_START + ((port) * 0x10))
0512 
0513 #define    CN23XX_SLI_MAC_NUMBER                 0x20050
0514 
0515 /** PEM(0..3)_BAR1_INDEX(0..15)address is defined as
0516  *  addr = (0x00011800C0000100  |port <<24 |idx <<3 )
0517  *  Here, port is PEM(0..3) & idx is INDEX(0..15)
0518  */
0519 #define    CN23XX_PEM_BAR1_INDEX_START             0x00011800C0000100ULL
0520 #define    CN23XX_PEM_OFFSET                       24
0521 #define    CN23XX_BAR1_INDEX_OFFSET                3
0522 
0523 #define    CN23XX_PEM_BAR1_INDEX_REG(port, idx)     \
0524         (CN23XX_PEM_BAR1_INDEX_START + (((u64)port) << CN23XX_PEM_OFFSET) + \
0525          ((idx) << CN23XX_BAR1_INDEX_OFFSET))
0526 
0527 /*############################ DPI #########################*/
0528 
0529 /* 1 register (64-bit) - provides DMA Enable */
0530 #define    CN23XX_DPI_CTL                 0x0001df0000000040ULL
0531 
0532 /* 1 register (64-bit) - Controls the DMA IO Operation */
0533 #define    CN23XX_DPI_DMA_CONTROL         0x0001df0000000048ULL
0534 
0535 /* 1 register (64-bit) - Provides DMA Instr'n Queue Enable  */
0536 #define    CN23XX_DPI_REQ_GBL_ENB         0x0001df0000000050ULL
0537 
0538 /* 1 register (64-bit) - DPI_REQ_ERR_RSP
0539  * Indicates which Instr'n Queue received error response from the IO sub-system
0540  */
0541 #define    CN23XX_DPI_REQ_ERR_RSP         0x0001df0000000058ULL
0542 
0543 /* 1 register (64-bit) - DPI_REQ_ERR_RST
0544  * Indicates which Instr'n Queue dropped an Instr'n
0545  */
0546 #define    CN23XX_DPI_REQ_ERR_RST         0x0001df0000000060ULL
0547 
0548 /* 6 register (64-bit) - DPI_DMA_ENG(0..5)_EN
0549  * Provides DMA Engine Queue Enable
0550  */
0551 #define    CN23XX_DPI_DMA_ENG0_ENB        0x0001df0000000080ULL
0552 #define    CN23XX_DPI_DMA_ENG_ENB(eng) (CN23XX_DPI_DMA_ENG0_ENB + ((eng) * 8))
0553 
0554 /* 8 register (64-bit) - DPI_DMA(0..7)_REQQ_CTL
0555  * Provides control bits for transaction on 8 Queues
0556  */
0557 #define    CN23XX_DPI_DMA_REQQ0_CTL       0x0001df0000000180ULL
0558 #define    CN23XX_DPI_DMA_REQQ_CTL(q_no)    \
0559         (CN23XX_DPI_DMA_REQQ0_CTL + ((q_no) * 8))
0560 
0561 /* 6 register (64-bit) - DPI_ENG(0..5)_BUF
0562  * Provides DMA Engine FIFO (Queue) Size
0563  */
0564 #define    CN23XX_DPI_DMA_ENG0_BUF        0x0001df0000000880ULL
0565 #define    CN23XX_DPI_DMA_ENG_BUF(eng)   \
0566         (CN23XX_DPI_DMA_ENG0_BUF + ((eng) * 8))
0567 
0568 /* 4 Registers (64-bit) */
0569 #define    CN23XX_DPI_SLI_PRT_CFG_START   0x0001df0000000900ULL
0570 #define    CN23XX_DPI_SLI_PRTX_CFG(port)        \
0571         (CN23XX_DPI_SLI_PRT_CFG_START + ((port) * 0x8))
0572 
0573 /* Masks for DPI_DMA_CONTROL Register */
0574 #define    CN23XX_DPI_DMA_COMMIT_MODE     BIT_ULL(58)
0575 #define    CN23XX_DPI_DMA_PKT_EN          BIT_ULL(56)
0576 #define    CN23XX_DPI_DMA_ENB             (0x0FULL << 48)
0577 /* Set the DMA Control, to update packet count not byte count sent by DMA,
0578  * when we use Interrupt Coalescing (CA mode)
0579  */
0580 #define    CN23XX_DPI_DMA_O_ADD1          BIT(19)
0581 /*selecting 64-bit Byte Swap Mode */
0582 #define    CN23XX_DPI_DMA_O_ES            BIT(15)
0583 #define    CN23XX_DPI_DMA_O_MODE          BIT(14)
0584 
0585 #define    CN23XX_DPI_DMA_CTL_MASK          \
0586         (CN23XX_DPI_DMA_COMMIT_MODE |   \
0587          CN23XX_DPI_DMA_PKT_EN      |   \
0588          CN23XX_DPI_DMA_O_ES        |   \
0589          CN23XX_DPI_DMA_O_MODE)
0590 
0591 /*############################ RST #########################*/
0592 
0593 #define    CN23XX_RST_BOOT            0x0001180006001600ULL
0594 #define    CN23XX_RST_SOFT_RST        0x0001180006001680ULL
0595 
0596 #define    CN23XX_LMC0_RESET_CTL               0x0001180088000180ULL
0597 #define    CN23XX_LMC0_RESET_CTL_DDR3RST_MASK  0x0000000000000001ULL
0598 
0599 #endif