1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2017 Chelsio Communications. All rights reserved. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __CUDBG_ENTITY_H__ 7*4882a593Smuzhiyun #define __CUDBG_ENTITY_H__ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define EDC0_FLAG 0 10*4882a593Smuzhiyun #define EDC1_FLAG 1 11*4882a593Smuzhiyun #define MC_FLAG 2 12*4882a593Smuzhiyun #define MC0_FLAG 3 13*4882a593Smuzhiyun #define MC1_FLAG 4 14*4882a593Smuzhiyun #define HMA_FLAG 5 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define CUDBG_ENTITY_SIGNATURE 0xCCEDB001 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct cudbg_mbox_log { 19*4882a593Smuzhiyun struct mbox_cmd entry; 20*4882a593Smuzhiyun u32 hi[MBOX_LEN / 8]; 21*4882a593Smuzhiyun u32 lo[MBOX_LEN / 8]; 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct cudbg_cim_qcfg { 25*4882a593Smuzhiyun u8 chip; 26*4882a593Smuzhiyun u16 base[CIM_NUM_IBQ + CIM_NUM_OBQ_T5]; 27*4882a593Smuzhiyun u16 size[CIM_NUM_IBQ + CIM_NUM_OBQ_T5]; 28*4882a593Smuzhiyun u16 thres[CIM_NUM_IBQ]; 29*4882a593Smuzhiyun u32 obq_wr[2 * CIM_NUM_OBQ_T5]; 30*4882a593Smuzhiyun u32 stat[4 * (CIM_NUM_IBQ + CIM_NUM_OBQ_T5)]; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun struct cudbg_rss_vf_conf { 34*4882a593Smuzhiyun u32 rss_vf_vfl; 35*4882a593Smuzhiyun u32 rss_vf_vfh; 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun struct cudbg_pm_stats { 39*4882a593Smuzhiyun u32 tx_cnt[T6_PM_NSTATS]; 40*4882a593Smuzhiyun u32 rx_cnt[T6_PM_NSTATS]; 41*4882a593Smuzhiyun u64 tx_cyc[T6_PM_NSTATS]; 42*4882a593Smuzhiyun u64 rx_cyc[T6_PM_NSTATS]; 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun struct cudbg_hw_sched { 46*4882a593Smuzhiyun u32 kbps[NTX_SCHED]; 47*4882a593Smuzhiyun u32 ipg[NTX_SCHED]; 48*4882a593Smuzhiyun u32 pace_tab[NTX_SCHED]; 49*4882a593Smuzhiyun u32 mode; 50*4882a593Smuzhiyun u32 map; 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define SGE_QBASE_DATA_REG_NUM 4 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun struct sge_qbase_reg_field { 56*4882a593Smuzhiyun u32 reg_addr; 57*4882a593Smuzhiyun u32 reg_data[SGE_QBASE_DATA_REG_NUM]; 58*4882a593Smuzhiyun /* Max supported PFs */ 59*4882a593Smuzhiyun u32 pf_data_value[PCIE_FW_MASTER_M + 1][SGE_QBASE_DATA_REG_NUM]; 60*4882a593Smuzhiyun /* Max supported VFs */ 61*4882a593Smuzhiyun u32 vf_data_value[T6_VF_M + 1][SGE_QBASE_DATA_REG_NUM]; 62*4882a593Smuzhiyun u32 vfcount; /* Actual number of max vfs in current configuration */ 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun struct ireg_field { 66*4882a593Smuzhiyun u32 ireg_addr; 67*4882a593Smuzhiyun u32 ireg_data; 68*4882a593Smuzhiyun u32 ireg_local_offset; 69*4882a593Smuzhiyun u32 ireg_offset_range; 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun struct ireg_buf { 73*4882a593Smuzhiyun struct ireg_field tp_pio; 74*4882a593Smuzhiyun u32 outbuf[32]; 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun struct cudbg_ulprx_la { 78*4882a593Smuzhiyun u32 data[ULPRX_LA_SIZE * 8]; 79*4882a593Smuzhiyun u32 size; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun struct cudbg_tp_la { 83*4882a593Smuzhiyun u32 size; 84*4882a593Smuzhiyun u32 mode; 85*4882a593Smuzhiyun u8 data[]; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun static const char * const cudbg_region[] = { 89*4882a593Smuzhiyun "DBQ contexts:", "IMSG contexts:", "FLM cache:", "TCBs:", 90*4882a593Smuzhiyun "Pstructs:", "Timers:", "Rx FL:", "Tx FL:", "Pstruct FL:", 91*4882a593Smuzhiyun "Tx payload:", "Rx payload:", "LE hash:", "iSCSI region:", 92*4882a593Smuzhiyun "TDDP region:", "TPT region:", "STAG region:", "RQ region:", 93*4882a593Smuzhiyun "RQUDP region:", "PBL region:", "TXPBL region:", 94*4882a593Smuzhiyun "DBVFIFO region:", "ULPRX state:", "ULPTX state:", 95*4882a593Smuzhiyun "On-chip queues:" 96*4882a593Smuzhiyun }; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* Memory region info relative to current memory (i.e. wrt 0). */ 99*4882a593Smuzhiyun struct cudbg_region_info { 100*4882a593Smuzhiyun bool exist; /* Does region exists in current memory? */ 101*4882a593Smuzhiyun u32 start; /* Start wrt 0 */ 102*4882a593Smuzhiyun u32 end; /* End wrt 0 */ 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun struct cudbg_mem_desc { 106*4882a593Smuzhiyun u32 base; 107*4882a593Smuzhiyun u32 limit; 108*4882a593Smuzhiyun u32 idx; 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define CUDBG_MEMINFO_REV 1 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun struct cudbg_meminfo { 114*4882a593Smuzhiyun struct cudbg_mem_desc avail[4]; 115*4882a593Smuzhiyun struct cudbg_mem_desc mem[ARRAY_SIZE(cudbg_region) + 3]; 116*4882a593Smuzhiyun u32 avail_c; 117*4882a593Smuzhiyun u32 mem_c; 118*4882a593Smuzhiyun u32 up_ram_lo; 119*4882a593Smuzhiyun u32 up_ram_hi; 120*4882a593Smuzhiyun u32 up_extmem2_lo; 121*4882a593Smuzhiyun u32 up_extmem2_hi; 122*4882a593Smuzhiyun u32 rx_pages_data[3]; 123*4882a593Smuzhiyun u32 tx_pages_data[4]; 124*4882a593Smuzhiyun u32 p_structs; 125*4882a593Smuzhiyun u32 reserved[12]; 126*4882a593Smuzhiyun u32 port_used[4]; 127*4882a593Smuzhiyun u32 port_alloc[4]; 128*4882a593Smuzhiyun u32 loopback_used[NCHAN]; 129*4882a593Smuzhiyun u32 loopback_alloc[NCHAN]; 130*4882a593Smuzhiyun u32 p_structs_free_cnt; 131*4882a593Smuzhiyun u32 free_rx_cnt; 132*4882a593Smuzhiyun u32 free_tx_cnt; 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun struct cudbg_cim_pif_la { 136*4882a593Smuzhiyun int size; 137*4882a593Smuzhiyun u8 data[]; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun struct cudbg_clk_info { 141*4882a593Smuzhiyun u64 retransmit_min; 142*4882a593Smuzhiyun u64 retransmit_max; 143*4882a593Smuzhiyun u64 persist_timer_min; 144*4882a593Smuzhiyun u64 persist_timer_max; 145*4882a593Smuzhiyun u64 keepalive_idle_timer; 146*4882a593Smuzhiyun u64 keepalive_interval; 147*4882a593Smuzhiyun u64 initial_srtt; 148*4882a593Smuzhiyun u64 finwait2_timer; 149*4882a593Smuzhiyun u32 dack_timer; 150*4882a593Smuzhiyun u32 res; 151*4882a593Smuzhiyun u32 cclk_ps; 152*4882a593Smuzhiyun u32 tre; 153*4882a593Smuzhiyun u32 dack_re; 154*4882a593Smuzhiyun }; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun struct cudbg_tid_info_region { 157*4882a593Smuzhiyun u32 ntids; 158*4882a593Smuzhiyun u32 nstids; 159*4882a593Smuzhiyun u32 stid_base; 160*4882a593Smuzhiyun u32 hash_base; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun u32 natids; 163*4882a593Smuzhiyun u32 nftids; 164*4882a593Smuzhiyun u32 ftid_base; 165*4882a593Smuzhiyun u32 aftid_base; 166*4882a593Smuzhiyun u32 aftid_end; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun u32 sftid_base; 169*4882a593Smuzhiyun u32 nsftids; 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun u32 uotid_base; 172*4882a593Smuzhiyun u32 nuotids; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun u32 sb; 175*4882a593Smuzhiyun u32 flags; 176*4882a593Smuzhiyun u32 le_db_conf; 177*4882a593Smuzhiyun u32 ip_users; 178*4882a593Smuzhiyun u32 ipv6_users; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun u32 hpftid_base; 181*4882a593Smuzhiyun u32 nhpftids; 182*4882a593Smuzhiyun }; 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun #define CUDBG_TID_INFO_REV 1 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun struct cudbg_tid_info_region_rev1 { 187*4882a593Smuzhiyun struct cudbg_ver_hdr ver_hdr; 188*4882a593Smuzhiyun struct cudbg_tid_info_region tid; 189*4882a593Smuzhiyun u32 tid_start; 190*4882a593Smuzhiyun u32 reserved[16]; 191*4882a593Smuzhiyun }; 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun #define CUDBG_LOWMEM_MAX_CTXT_QIDS 256 194*4882a593Smuzhiyun #define CUDBG_MAX_FL_QIDS 1024 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun struct cudbg_ch_cntxt { 197*4882a593Smuzhiyun u32 cntxt_type; 198*4882a593Smuzhiyun u32 cntxt_id; 199*4882a593Smuzhiyun u32 data[SGE_CTXT_SIZE / 4]; 200*4882a593Smuzhiyun }; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun #define CUDBG_MAX_RPLC_SIZE 128 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun struct cudbg_mps_tcam { 205*4882a593Smuzhiyun u64 mask; 206*4882a593Smuzhiyun u32 rplc[8]; 207*4882a593Smuzhiyun u32 idx; 208*4882a593Smuzhiyun u32 cls_lo; 209*4882a593Smuzhiyun u32 cls_hi; 210*4882a593Smuzhiyun u32 rplc_size; 211*4882a593Smuzhiyun u32 vniy; 212*4882a593Smuzhiyun u32 vnix; 213*4882a593Smuzhiyun u32 dip_hit; 214*4882a593Smuzhiyun u32 vlan_vld; 215*4882a593Smuzhiyun u32 repli; 216*4882a593Smuzhiyun u16 ivlan; 217*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 218*4882a593Smuzhiyun u8 lookup_type; 219*4882a593Smuzhiyun u8 port_num; 220*4882a593Smuzhiyun u8 reserved[2]; 221*4882a593Smuzhiyun }; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun #define CUDBG_VPD_PF_SIZE 0x800 224*4882a593Smuzhiyun #define CUDBG_SCFG_VER_ADDR 0x06 225*4882a593Smuzhiyun #define CUDBG_SCFG_VER_LEN 4 226*4882a593Smuzhiyun #define CUDBG_VPD_VER_ADDR 0x18c7 227*4882a593Smuzhiyun #define CUDBG_VPD_VER_LEN 2 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun struct cudbg_vpd_data { 230*4882a593Smuzhiyun u8 sn[SERNUM_LEN + 1]; 231*4882a593Smuzhiyun u8 bn[PN_LEN + 1]; 232*4882a593Smuzhiyun u8 na[MACADDR_LEN + 1]; 233*4882a593Smuzhiyun u8 mn[ID_LEN + 1]; 234*4882a593Smuzhiyun u16 fw_major; 235*4882a593Smuzhiyun u16 fw_minor; 236*4882a593Smuzhiyun u16 fw_micro; 237*4882a593Smuzhiyun u16 fw_build; 238*4882a593Smuzhiyun u32 scfg_vers; 239*4882a593Smuzhiyun u32 vpd_vers; 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun #define CUDBG_MAX_TCAM_TID 0x800 243*4882a593Smuzhiyun #define CUDBG_T6_CLIP 1536 244*4882a593Smuzhiyun #define CUDBG_MAX_TID_COMP_EN 6144 245*4882a593Smuzhiyun #define CUDBG_MAX_TID_COMP_DIS 3072 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun enum cudbg_le_entry_types { 248*4882a593Smuzhiyun LE_ET_UNKNOWN = 0, 249*4882a593Smuzhiyun LE_ET_TCAM_CON = 1, 250*4882a593Smuzhiyun LE_ET_TCAM_SERVER = 2, 251*4882a593Smuzhiyun LE_ET_TCAM_FILTER = 3, 252*4882a593Smuzhiyun LE_ET_TCAM_CLIP = 4, 253*4882a593Smuzhiyun LE_ET_TCAM_ROUTING = 5, 254*4882a593Smuzhiyun LE_ET_HASH_CON = 6, 255*4882a593Smuzhiyun LE_ET_INVALID_TID = 8, 256*4882a593Smuzhiyun }; 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun struct cudbg_tcam { 259*4882a593Smuzhiyun u32 filter_start; 260*4882a593Smuzhiyun u32 server_start; 261*4882a593Smuzhiyun u32 clip_start; 262*4882a593Smuzhiyun u32 routing_start; 263*4882a593Smuzhiyun u32 tid_hash_base; 264*4882a593Smuzhiyun u32 max_tid; 265*4882a593Smuzhiyun }; 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun struct cudbg_tid_data { 268*4882a593Smuzhiyun u32 tid; 269*4882a593Smuzhiyun u32 dbig_cmd; 270*4882a593Smuzhiyun u32 dbig_conf; 271*4882a593Smuzhiyun u32 dbig_rsp_stat; 272*4882a593Smuzhiyun u32 data[NUM_LE_DB_DBGI_RSP_DATA_INSTANCES]; 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun #define CUDBG_NUM_ULPTX 11 276*4882a593Smuzhiyun #define CUDBG_NUM_ULPTX_READ 512 277*4882a593Smuzhiyun #define CUDBG_NUM_ULPTX_ASIC 6 278*4882a593Smuzhiyun #define CUDBG_NUM_ULPTX_ASIC_READ 128 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define CUDBG_ULPTX_LA_REV 1 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun struct cudbg_ulptx_la { 283*4882a593Smuzhiyun u32 rdptr[CUDBG_NUM_ULPTX]; 284*4882a593Smuzhiyun u32 wrptr[CUDBG_NUM_ULPTX]; 285*4882a593Smuzhiyun u32 rddata[CUDBG_NUM_ULPTX]; 286*4882a593Smuzhiyun u32 rd_data[CUDBG_NUM_ULPTX][CUDBG_NUM_ULPTX_READ]; 287*4882a593Smuzhiyun u32 rdptr_asic[CUDBG_NUM_ULPTX_ASIC_READ]; 288*4882a593Smuzhiyun u32 rddata_asic[CUDBG_NUM_ULPTX_ASIC_READ][CUDBG_NUM_ULPTX_ASIC]; 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun #define CUDBG_CHAC_PBT_ADDR 0x2800 292*4882a593Smuzhiyun #define CUDBG_CHAC_PBT_LRF 0x3000 293*4882a593Smuzhiyun #define CUDBG_CHAC_PBT_DATA 0x3800 294*4882a593Smuzhiyun #define CUDBG_PBT_DYNAMIC_ENTRIES 8 295*4882a593Smuzhiyun #define CUDBG_PBT_STATIC_ENTRIES 16 296*4882a593Smuzhiyun #define CUDBG_LRF_ENTRIES 8 297*4882a593Smuzhiyun #define CUDBG_PBT_DATA_ENTRIES 512 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun struct cudbg_pbt_tables { 300*4882a593Smuzhiyun u32 pbt_dynamic[CUDBG_PBT_DYNAMIC_ENTRIES]; 301*4882a593Smuzhiyun u32 pbt_static[CUDBG_PBT_STATIC_ENTRIES]; 302*4882a593Smuzhiyun u32 lrf_table[CUDBG_LRF_ENTRIES]; 303*4882a593Smuzhiyun u32 pbt_data[CUDBG_PBT_DATA_ENTRIES]; 304*4882a593Smuzhiyun }; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun enum cudbg_qdesc_qtype { 307*4882a593Smuzhiyun CUDBG_QTYPE_UNKNOWN = 0, 308*4882a593Smuzhiyun CUDBG_QTYPE_NIC_TXQ, 309*4882a593Smuzhiyun CUDBG_QTYPE_NIC_RXQ, 310*4882a593Smuzhiyun CUDBG_QTYPE_NIC_FLQ, 311*4882a593Smuzhiyun CUDBG_QTYPE_CTRLQ, 312*4882a593Smuzhiyun CUDBG_QTYPE_FWEVTQ, 313*4882a593Smuzhiyun CUDBG_QTYPE_INTRQ, 314*4882a593Smuzhiyun CUDBG_QTYPE_PTP_TXQ, 315*4882a593Smuzhiyun CUDBG_QTYPE_OFLD_TXQ, 316*4882a593Smuzhiyun CUDBG_QTYPE_RDMA_RXQ, 317*4882a593Smuzhiyun CUDBG_QTYPE_RDMA_FLQ, 318*4882a593Smuzhiyun CUDBG_QTYPE_RDMA_CIQ, 319*4882a593Smuzhiyun CUDBG_QTYPE_ISCSI_RXQ, 320*4882a593Smuzhiyun CUDBG_QTYPE_ISCSI_FLQ, 321*4882a593Smuzhiyun CUDBG_QTYPE_ISCSIT_RXQ, 322*4882a593Smuzhiyun CUDBG_QTYPE_ISCSIT_FLQ, 323*4882a593Smuzhiyun CUDBG_QTYPE_CRYPTO_TXQ, 324*4882a593Smuzhiyun CUDBG_QTYPE_CRYPTO_RXQ, 325*4882a593Smuzhiyun CUDBG_QTYPE_CRYPTO_FLQ, 326*4882a593Smuzhiyun CUDBG_QTYPE_TLS_RXQ, 327*4882a593Smuzhiyun CUDBG_QTYPE_TLS_FLQ, 328*4882a593Smuzhiyun CUDBG_QTYPE_ETHOFLD_TXQ, 329*4882a593Smuzhiyun CUDBG_QTYPE_ETHOFLD_RXQ, 330*4882a593Smuzhiyun CUDBG_QTYPE_ETHOFLD_FLQ, 331*4882a593Smuzhiyun CUDBG_QTYPE_MAX, 332*4882a593Smuzhiyun }; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun #define CUDBG_QDESC_REV 1 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun struct cudbg_qdesc_entry { 337*4882a593Smuzhiyun u32 data_size; 338*4882a593Smuzhiyun u32 qtype; 339*4882a593Smuzhiyun u32 qid; 340*4882a593Smuzhiyun u32 desc_size; 341*4882a593Smuzhiyun u32 num_desc; 342*4882a593Smuzhiyun u8 data[]; /* Must be last */ 343*4882a593Smuzhiyun }; 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun struct cudbg_qdesc_info { 346*4882a593Smuzhiyun u32 qdesc_entry_size; 347*4882a593Smuzhiyun u32 num_queues; 348*4882a593Smuzhiyun u8 data[]; /* Must be last */ 349*4882a593Smuzhiyun }; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun #define IREG_NUM_ELEM 4 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun #define CUDBG_NUM_PCIE_CONFIG_REGS 0x61 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun #endif /* __CUDBG_ENTITY_H__ */ 356