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