xref: /dpdk/drivers/net/cxgbe/base/t4_hw.h (revision 745b88360817c1003a9f5282cf899f790440b189)
12aa5c722SRahul Lakkireddy /* SPDX-License-Identifier: BSD-3-Clause
22aa5c722SRahul Lakkireddy  * Copyright(c) 2014-2018 Chelsio Communications.
33bd122eeSRahul Lakkireddy  * All rights reserved.
43bd122eeSRahul Lakkireddy  */
53bd122eeSRahul Lakkireddy 
63bd122eeSRahul Lakkireddy #ifndef __T4_HW_H
73bd122eeSRahul Lakkireddy #define __T4_HW_H
83bd122eeSRahul Lakkireddy 
93bd122eeSRahul Lakkireddy enum {
103bd122eeSRahul Lakkireddy 	NCHAN           = 4,     /* # of HW channels */
11fe0bd9eeSRahul Lakkireddy 	EEPROMSIZE      = 17408, /* Serial EEPROM physical size */
12fe0bd9eeSRahul Lakkireddy 	EEPROMVSIZE     = 32768, /* Serial EEPROM virtual address space size */
13fe0bd9eeSRahul Lakkireddy 	EEPROMPFSIZE    = 1024,  /* EEPROM writable area size for PFn, n>0 */
143bd122eeSRahul Lakkireddy 	NMTUS           = 16,    /* size of MTU table */
153bd122eeSRahul Lakkireddy 	NCCTRL_WIN      = 32,    /* # of congestion control windows */
163bd122eeSRahul Lakkireddy 	MBOX_LEN        = 64,    /* mailbox size in bytes */
173bd122eeSRahul Lakkireddy 	UDBS_SEG_SIZE   = 128,   /* segment size for BAR2 user doorbells */
183bd122eeSRahul Lakkireddy };
193bd122eeSRahul Lakkireddy 
203bd122eeSRahul Lakkireddy enum {
213bd122eeSRahul Lakkireddy 	CIMLA_SIZE     = 2048,  /* # of 32-bit words in CIM LA */
223bd122eeSRahul Lakkireddy };
233bd122eeSRahul Lakkireddy 
243bd122eeSRahul Lakkireddy enum {
253bd122eeSRahul Lakkireddy 	SF_SEC_SIZE = 64 * 1024,      /* serial flash sector size */
263bd122eeSRahul Lakkireddy };
273bd122eeSRahul Lakkireddy 
283bd122eeSRahul Lakkireddy enum {
293bd122eeSRahul Lakkireddy 	SGE_NTIMERS = 6,          /* # of interrupt holdoff timer values */
303bd122eeSRahul Lakkireddy 	SGE_NCOUNTERS = 4,        /* # of interrupt packet counter values */
31*745b8836SRahul Lakkireddy 	SGE_FL_BUFFER_SIZE_NUM = 16, /* # of freelist buffser size regs */
323bd122eeSRahul Lakkireddy };
333bd122eeSRahul Lakkireddy 
343bd122eeSRahul Lakkireddy /* PCI-e memory window access */
353bd122eeSRahul Lakkireddy enum pcie_memwin {
363bd122eeSRahul Lakkireddy 	MEMWIN_NIC      = 0,
373bd122eeSRahul Lakkireddy };
383bd122eeSRahul Lakkireddy 
393bd122eeSRahul Lakkireddy enum {
403bd122eeSRahul Lakkireddy 	SGE_MAX_WR_LEN = 512,     /* max WR size in bytes */
413bd122eeSRahul Lakkireddy 	SGE_EQ_IDXSIZE = 64,      /* egress queue pidx/cidx unit size */
423bd122eeSRahul Lakkireddy 	/* max no. of desc allowed in WR */
433bd122eeSRahul Lakkireddy 	SGE_MAX_WR_NDESC = SGE_MAX_WR_LEN / SGE_EQ_IDXSIZE,
443bd122eeSRahul Lakkireddy };
453bd122eeSRahul Lakkireddy 
468d3c12e1SShagun Agrawal enum {
478d3c12e1SShagun Agrawal 	TCB_SIZE        = 128,   /* TCB size */
488d3c12e1SShagun Agrawal };
498d3c12e1SShagun Agrawal 
503bd122eeSRahul Lakkireddy struct sge_qstat {                /* data written to SGE queue status entries */
513bd122eeSRahul Lakkireddy 	__be32 qid;
523bd122eeSRahul Lakkireddy 	__be16 cidx;
533bd122eeSRahul Lakkireddy 	__be16 pidx;
543bd122eeSRahul Lakkireddy };
553bd122eeSRahul Lakkireddy 
563bd122eeSRahul Lakkireddy /*
573bd122eeSRahul Lakkireddy  * Structure for last 128 bits of response descriptors
583bd122eeSRahul Lakkireddy  */
593bd122eeSRahul Lakkireddy struct rsp_ctrl {
603bd122eeSRahul Lakkireddy 	__be32 hdrbuflen_pidx;
613bd122eeSRahul Lakkireddy 	__be32 pldbuflen_qid;
623bd122eeSRahul Lakkireddy 	union {
633bd122eeSRahul Lakkireddy 		u8 type_gen;
643bd122eeSRahul Lakkireddy 		__be64 last_flit;
653bd122eeSRahul Lakkireddy 	} u;
663bd122eeSRahul Lakkireddy };
673bd122eeSRahul Lakkireddy 
683bd122eeSRahul Lakkireddy #define S_RSPD_NEWBUF    31
693bd122eeSRahul Lakkireddy #define V_RSPD_NEWBUF(x) ((x) << S_RSPD_NEWBUF)
703bd122eeSRahul Lakkireddy #define F_RSPD_NEWBUF    V_RSPD_NEWBUF(1U)
713bd122eeSRahul Lakkireddy 
723bd122eeSRahul Lakkireddy #define S_RSPD_LEN    0
733bd122eeSRahul Lakkireddy #define M_RSPD_LEN    0x7fffffff
743bd122eeSRahul Lakkireddy #define V_RSPD_LEN(x) ((x) << S_RSPD_LEN)
753bd122eeSRahul Lakkireddy #define G_RSPD_LEN(x) (((x) >> S_RSPD_LEN) & M_RSPD_LEN)
763bd122eeSRahul Lakkireddy 
773bd122eeSRahul Lakkireddy #define S_RSPD_GEN    7
783bd122eeSRahul Lakkireddy #define V_RSPD_GEN(x) ((x) << S_RSPD_GEN)
793bd122eeSRahul Lakkireddy #define F_RSPD_GEN    V_RSPD_GEN(1U)
803bd122eeSRahul Lakkireddy 
813bd122eeSRahul Lakkireddy #define S_RSPD_TYPE    4
823bd122eeSRahul Lakkireddy #define M_RSPD_TYPE    0x3
833bd122eeSRahul Lakkireddy #define V_RSPD_TYPE(x) ((x) << S_RSPD_TYPE)
843bd122eeSRahul Lakkireddy #define G_RSPD_TYPE(x) (((x) >> S_RSPD_TYPE) & M_RSPD_TYPE)
853bd122eeSRahul Lakkireddy 
863bd122eeSRahul Lakkireddy /* Rx queue interrupt deferral field: timer index */
873bd122eeSRahul Lakkireddy #define S_QINTR_CNT_EN    0
883bd122eeSRahul Lakkireddy #define V_QINTR_CNT_EN(x) ((x) << S_QINTR_CNT_EN)
893bd122eeSRahul Lakkireddy #define F_QINTR_CNT_EN    V_QINTR_CNT_EN(1U)
903bd122eeSRahul Lakkireddy 
913bd122eeSRahul Lakkireddy #define S_QINTR_TIMER_IDX    1
923bd122eeSRahul Lakkireddy #define M_QINTR_TIMER_IDX    0x7
933bd122eeSRahul Lakkireddy #define V_QINTR_TIMER_IDX(x) ((x) << S_QINTR_TIMER_IDX)
943bd122eeSRahul Lakkireddy #define G_QINTR_TIMER_IDX(x) (((x) >> S_QINTR_TIMER_IDX) & M_QINTR_TIMER_IDX)
953bd122eeSRahul Lakkireddy 
963bd122eeSRahul Lakkireddy /*
973bd122eeSRahul Lakkireddy  * Flash layout.
983bd122eeSRahul Lakkireddy  */
993bd122eeSRahul Lakkireddy #define FLASH_START(start)      ((start) * SF_SEC_SIZE)
1003bd122eeSRahul Lakkireddy #define FLASH_MAX_SIZE(nsecs)   ((nsecs) * SF_SEC_SIZE)
1013bd122eeSRahul Lakkireddy 
1023bd122eeSRahul Lakkireddy enum {
1033bd122eeSRahul Lakkireddy 	/*
104c962618cSRahul Lakkireddy 	 * Various Expansion-ROM boot images, etc.
105c962618cSRahul Lakkireddy 	 */
106c962618cSRahul Lakkireddy 	FLASH_EXP_ROM_START_SEC = 0,
107c962618cSRahul Lakkireddy 	FLASH_EXP_ROM_NSECS = 6,
108c962618cSRahul Lakkireddy 	FLASH_EXP_ROM_START = FLASH_START(FLASH_EXP_ROM_START_SEC),
109c962618cSRahul Lakkireddy 	FLASH_EXP_ROM_MAX_SIZE = FLASH_MAX_SIZE(FLASH_EXP_ROM_NSECS),
110c962618cSRahul Lakkireddy 
111c962618cSRahul Lakkireddy 	/*
1123bd122eeSRahul Lakkireddy 	 * Location of firmware image in FLASH.
1133bd122eeSRahul Lakkireddy 	 */
1143bd122eeSRahul Lakkireddy 	FLASH_FW_START_SEC = 8,
1153bd122eeSRahul Lakkireddy 	FLASH_FW_NSECS = 16,
1163bd122eeSRahul Lakkireddy 	FLASH_FW_START = FLASH_START(FLASH_FW_START_SEC),
1173bd122eeSRahul Lakkireddy 	FLASH_FW_MAX_SIZE = FLASH_MAX_SIZE(FLASH_FW_NSECS),
1183bd122eeSRahul Lakkireddy 
1193bd122eeSRahul Lakkireddy 	/*
120c962618cSRahul Lakkireddy 	 * Location of bootstrap firmware image in FLASH.
121c962618cSRahul Lakkireddy 	 */
122c962618cSRahul Lakkireddy 	FLASH_FWBOOTSTRAP_START_SEC = 27,
123c962618cSRahul Lakkireddy 	FLASH_FWBOOTSTRAP_NSECS = 1,
124c962618cSRahul Lakkireddy 	FLASH_FWBOOTSTRAP_START = FLASH_START(FLASH_FWBOOTSTRAP_START_SEC),
125c962618cSRahul Lakkireddy 	FLASH_FWBOOTSTRAP_MAX_SIZE = FLASH_MAX_SIZE(FLASH_FWBOOTSTRAP_NSECS),
126c962618cSRahul Lakkireddy 
127c962618cSRahul Lakkireddy 	/*
1283bd122eeSRahul Lakkireddy 	 * Location of Firmware Configuration File in FLASH.
1293bd122eeSRahul Lakkireddy 	 */
1303bd122eeSRahul Lakkireddy 	FLASH_CFG_START_SEC = 31,
1313bd122eeSRahul Lakkireddy 	FLASH_CFG_NSECS = 1,
1323bd122eeSRahul Lakkireddy 	FLASH_CFG_START = FLASH_START(FLASH_CFG_START_SEC),
1333bd122eeSRahul Lakkireddy 	FLASH_CFG_MAX_SIZE = FLASH_MAX_SIZE(FLASH_CFG_NSECS),
1343bd122eeSRahul Lakkireddy 
1353bd122eeSRahul Lakkireddy 	/*
1363bd122eeSRahul Lakkireddy 	 * We don't support FLASH devices which can't support the full
1373bd122eeSRahul Lakkireddy 	 * standard set of sections which we need for normal operations.
1383bd122eeSRahul Lakkireddy 	 */
1393bd122eeSRahul Lakkireddy 	FLASH_MIN_SIZE = FLASH_CFG_START + FLASH_CFG_MAX_SIZE,
1403bd122eeSRahul Lakkireddy };
1413bd122eeSRahul Lakkireddy 
1423bd122eeSRahul Lakkireddy #undef FLASH_START
1433bd122eeSRahul Lakkireddy #undef FLASH_MAX_SIZE
1443bd122eeSRahul Lakkireddy 
1453bd122eeSRahul Lakkireddy #endif /* __T4_HW_H */
146