162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2017 Chelsio Communications. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __CUDBG_ENTITY_H__ 762306a36Sopenharmony_ci#define __CUDBG_ENTITY_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#define EDC0_FLAG 0 1062306a36Sopenharmony_ci#define EDC1_FLAG 1 1162306a36Sopenharmony_ci#define MC_FLAG 2 1262306a36Sopenharmony_ci#define MC0_FLAG 3 1362306a36Sopenharmony_ci#define MC1_FLAG 4 1462306a36Sopenharmony_ci#define HMA_FLAG 5 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define CUDBG_ENTITY_SIGNATURE 0xCCEDB001 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct cudbg_mbox_log { 1962306a36Sopenharmony_ci struct mbox_cmd entry; 2062306a36Sopenharmony_ci u32 hi[MBOX_LEN / 8]; 2162306a36Sopenharmony_ci u32 lo[MBOX_LEN / 8]; 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistruct cudbg_cim_qcfg { 2562306a36Sopenharmony_ci u8 chip; 2662306a36Sopenharmony_ci u16 base[CIM_NUM_IBQ + CIM_NUM_OBQ_T5]; 2762306a36Sopenharmony_ci u16 size[CIM_NUM_IBQ + CIM_NUM_OBQ_T5]; 2862306a36Sopenharmony_ci u16 thres[CIM_NUM_IBQ]; 2962306a36Sopenharmony_ci u32 obq_wr[2 * CIM_NUM_OBQ_T5]; 3062306a36Sopenharmony_ci u32 stat[4 * (CIM_NUM_IBQ + CIM_NUM_OBQ_T5)]; 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistruct cudbg_rss_vf_conf { 3462306a36Sopenharmony_ci u32 rss_vf_vfl; 3562306a36Sopenharmony_ci u32 rss_vf_vfh; 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct cudbg_pm_stats { 3962306a36Sopenharmony_ci u32 tx_cnt[T6_PM_NSTATS]; 4062306a36Sopenharmony_ci u32 rx_cnt[T6_PM_NSTATS]; 4162306a36Sopenharmony_ci u64 tx_cyc[T6_PM_NSTATS]; 4262306a36Sopenharmony_ci u64 rx_cyc[T6_PM_NSTATS]; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct cudbg_hw_sched { 4662306a36Sopenharmony_ci u32 kbps[NTX_SCHED]; 4762306a36Sopenharmony_ci u32 ipg[NTX_SCHED]; 4862306a36Sopenharmony_ci u32 pace_tab[NTX_SCHED]; 4962306a36Sopenharmony_ci u32 mode; 5062306a36Sopenharmony_ci u32 map; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define SGE_QBASE_DATA_REG_NUM 4 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct sge_qbase_reg_field { 5662306a36Sopenharmony_ci u32 reg_addr; 5762306a36Sopenharmony_ci u32 reg_data[SGE_QBASE_DATA_REG_NUM]; 5862306a36Sopenharmony_ci /* Max supported PFs */ 5962306a36Sopenharmony_ci u32 pf_data_value[PCIE_FW_MASTER_M + 1][SGE_QBASE_DATA_REG_NUM]; 6062306a36Sopenharmony_ci /* Max supported VFs */ 6162306a36Sopenharmony_ci u32 vf_data_value[T6_VF_M + 1][SGE_QBASE_DATA_REG_NUM]; 6262306a36Sopenharmony_ci u32 vfcount; /* Actual number of max vfs in current configuration */ 6362306a36Sopenharmony_ci}; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistruct ireg_field { 6662306a36Sopenharmony_ci u32 ireg_addr; 6762306a36Sopenharmony_ci u32 ireg_data; 6862306a36Sopenharmony_ci u32 ireg_local_offset; 6962306a36Sopenharmony_ci u32 ireg_offset_range; 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistruct ireg_buf { 7362306a36Sopenharmony_ci struct ireg_field tp_pio; 7462306a36Sopenharmony_ci u32 outbuf[32]; 7562306a36Sopenharmony_ci}; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct cudbg_ulprx_la { 7862306a36Sopenharmony_ci u32 data[ULPRX_LA_SIZE * 8]; 7962306a36Sopenharmony_ci u32 size; 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_cistruct cudbg_tp_la { 8362306a36Sopenharmony_ci u32 size; 8462306a36Sopenharmony_ci u32 mode; 8562306a36Sopenharmony_ci u8 data[]; 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_cistatic const char * const cudbg_region[] = { 8962306a36Sopenharmony_ci "DBQ contexts:", "IMSG contexts:", "FLM cache:", "TCBs:", 9062306a36Sopenharmony_ci "Pstructs:", "Timers:", "Rx FL:", "Tx FL:", "Pstruct FL:", 9162306a36Sopenharmony_ci "Tx payload:", "Rx payload:", "LE hash:", "iSCSI region:", 9262306a36Sopenharmony_ci "TDDP region:", "TPT region:", "STAG region:", "RQ region:", 9362306a36Sopenharmony_ci "RQUDP region:", "PBL region:", "TXPBL region:", 9462306a36Sopenharmony_ci "DBVFIFO region:", "ULPRX state:", "ULPTX state:", 9562306a36Sopenharmony_ci "On-chip queues:" 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci/* Memory region info relative to current memory (i.e. wrt 0). */ 9962306a36Sopenharmony_cistruct cudbg_region_info { 10062306a36Sopenharmony_ci bool exist; /* Does region exists in current memory? */ 10162306a36Sopenharmony_ci u32 start; /* Start wrt 0 */ 10262306a36Sopenharmony_ci u32 end; /* End wrt 0 */ 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistruct cudbg_mem_desc { 10662306a36Sopenharmony_ci u32 base; 10762306a36Sopenharmony_ci u32 limit; 10862306a36Sopenharmony_ci u32 idx; 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci#define CUDBG_MEMINFO_REV 1 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_cistruct cudbg_meminfo { 11462306a36Sopenharmony_ci struct cudbg_mem_desc avail[4]; 11562306a36Sopenharmony_ci struct cudbg_mem_desc mem[ARRAY_SIZE(cudbg_region) + 3]; 11662306a36Sopenharmony_ci u32 avail_c; 11762306a36Sopenharmony_ci u32 mem_c; 11862306a36Sopenharmony_ci u32 up_ram_lo; 11962306a36Sopenharmony_ci u32 up_ram_hi; 12062306a36Sopenharmony_ci u32 up_extmem2_lo; 12162306a36Sopenharmony_ci u32 up_extmem2_hi; 12262306a36Sopenharmony_ci u32 rx_pages_data[3]; 12362306a36Sopenharmony_ci u32 tx_pages_data[4]; 12462306a36Sopenharmony_ci u32 p_structs; 12562306a36Sopenharmony_ci u32 reserved[12]; 12662306a36Sopenharmony_ci u32 port_used[4]; 12762306a36Sopenharmony_ci u32 port_alloc[4]; 12862306a36Sopenharmony_ci u32 loopback_used[NCHAN]; 12962306a36Sopenharmony_ci u32 loopback_alloc[NCHAN]; 13062306a36Sopenharmony_ci u32 p_structs_free_cnt; 13162306a36Sopenharmony_ci u32 free_rx_cnt; 13262306a36Sopenharmony_ci u32 free_tx_cnt; 13362306a36Sopenharmony_ci}; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_cistruct cudbg_cim_pif_la { 13662306a36Sopenharmony_ci int size; 13762306a36Sopenharmony_ci u8 data[]; 13862306a36Sopenharmony_ci}; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_cistruct cudbg_clk_info { 14162306a36Sopenharmony_ci u64 retransmit_min; 14262306a36Sopenharmony_ci u64 retransmit_max; 14362306a36Sopenharmony_ci u64 persist_timer_min; 14462306a36Sopenharmony_ci u64 persist_timer_max; 14562306a36Sopenharmony_ci u64 keepalive_idle_timer; 14662306a36Sopenharmony_ci u64 keepalive_interval; 14762306a36Sopenharmony_ci u64 initial_srtt; 14862306a36Sopenharmony_ci u64 finwait2_timer; 14962306a36Sopenharmony_ci u32 dack_timer; 15062306a36Sopenharmony_ci u32 res; 15162306a36Sopenharmony_ci u32 cclk_ps; 15262306a36Sopenharmony_ci u32 tre; 15362306a36Sopenharmony_ci u32 dack_re; 15462306a36Sopenharmony_ci}; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_cistruct cudbg_tid_info_region { 15762306a36Sopenharmony_ci u32 ntids; 15862306a36Sopenharmony_ci u32 nstids; 15962306a36Sopenharmony_ci u32 stid_base; 16062306a36Sopenharmony_ci u32 hash_base; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci u32 natids; 16362306a36Sopenharmony_ci u32 nftids; 16462306a36Sopenharmony_ci u32 ftid_base; 16562306a36Sopenharmony_ci u32 aftid_base; 16662306a36Sopenharmony_ci u32 aftid_end; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci u32 sftid_base; 16962306a36Sopenharmony_ci u32 nsftids; 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci u32 uotid_base; 17262306a36Sopenharmony_ci u32 nuotids; 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci u32 sb; 17562306a36Sopenharmony_ci u32 flags; 17662306a36Sopenharmony_ci u32 le_db_conf; 17762306a36Sopenharmony_ci u32 ip_users; 17862306a36Sopenharmony_ci u32 ipv6_users; 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci u32 hpftid_base; 18162306a36Sopenharmony_ci u32 nhpftids; 18262306a36Sopenharmony_ci}; 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci#define CUDBG_TID_INFO_REV 1 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistruct cudbg_tid_info_region_rev1 { 18762306a36Sopenharmony_ci struct cudbg_ver_hdr ver_hdr; 18862306a36Sopenharmony_ci struct cudbg_tid_info_region tid; 18962306a36Sopenharmony_ci u32 tid_start; 19062306a36Sopenharmony_ci u32 reserved[16]; 19162306a36Sopenharmony_ci}; 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci#define CUDBG_LOWMEM_MAX_CTXT_QIDS 256 19462306a36Sopenharmony_ci#define CUDBG_MAX_FL_QIDS 1024 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_cistruct cudbg_ch_cntxt { 19762306a36Sopenharmony_ci u32 cntxt_type; 19862306a36Sopenharmony_ci u32 cntxt_id; 19962306a36Sopenharmony_ci u32 data[SGE_CTXT_SIZE / 4]; 20062306a36Sopenharmony_ci}; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci#define CUDBG_MAX_RPLC_SIZE 128 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_cistruct cudbg_mps_tcam { 20562306a36Sopenharmony_ci u64 mask; 20662306a36Sopenharmony_ci u32 rplc[8]; 20762306a36Sopenharmony_ci u32 idx; 20862306a36Sopenharmony_ci u32 cls_lo; 20962306a36Sopenharmony_ci u32 cls_hi; 21062306a36Sopenharmony_ci u32 rplc_size; 21162306a36Sopenharmony_ci u32 vniy; 21262306a36Sopenharmony_ci u32 vnix; 21362306a36Sopenharmony_ci u32 dip_hit; 21462306a36Sopenharmony_ci u32 vlan_vld; 21562306a36Sopenharmony_ci u32 repli; 21662306a36Sopenharmony_ci u16 ivlan; 21762306a36Sopenharmony_ci u8 addr[ETH_ALEN]; 21862306a36Sopenharmony_ci u8 lookup_type; 21962306a36Sopenharmony_ci u8 port_num; 22062306a36Sopenharmony_ci u8 reserved[2]; 22162306a36Sopenharmony_ci}; 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci#define CUDBG_VPD_VER_ADDR 0x18c7 22462306a36Sopenharmony_ci#define CUDBG_VPD_VER_LEN 2 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_cistruct cudbg_vpd_data { 22762306a36Sopenharmony_ci u8 sn[SERNUM_LEN + 1]; 22862306a36Sopenharmony_ci u8 bn[PN_LEN + 1]; 22962306a36Sopenharmony_ci u8 na[MACADDR_LEN + 1]; 23062306a36Sopenharmony_ci u8 mn[ID_LEN + 1]; 23162306a36Sopenharmony_ci u16 fw_major; 23262306a36Sopenharmony_ci u16 fw_minor; 23362306a36Sopenharmony_ci u16 fw_micro; 23462306a36Sopenharmony_ci u16 fw_build; 23562306a36Sopenharmony_ci u32 scfg_vers; 23662306a36Sopenharmony_ci u32 vpd_vers; 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci#define CUDBG_MAX_TCAM_TID 0x800 24062306a36Sopenharmony_ci#define CUDBG_T6_CLIP 1536 24162306a36Sopenharmony_ci#define CUDBG_MAX_TID_COMP_EN 6144 24262306a36Sopenharmony_ci#define CUDBG_MAX_TID_COMP_DIS 3072 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_cienum cudbg_le_entry_types { 24562306a36Sopenharmony_ci LE_ET_UNKNOWN = 0, 24662306a36Sopenharmony_ci LE_ET_TCAM_CON = 1, 24762306a36Sopenharmony_ci LE_ET_TCAM_SERVER = 2, 24862306a36Sopenharmony_ci LE_ET_TCAM_FILTER = 3, 24962306a36Sopenharmony_ci LE_ET_TCAM_CLIP = 4, 25062306a36Sopenharmony_ci LE_ET_TCAM_ROUTING = 5, 25162306a36Sopenharmony_ci LE_ET_HASH_CON = 6, 25262306a36Sopenharmony_ci LE_ET_INVALID_TID = 8, 25362306a36Sopenharmony_ci}; 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_cistruct cudbg_tcam { 25662306a36Sopenharmony_ci u32 filter_start; 25762306a36Sopenharmony_ci u32 server_start; 25862306a36Sopenharmony_ci u32 clip_start; 25962306a36Sopenharmony_ci u32 routing_start; 26062306a36Sopenharmony_ci u32 tid_hash_base; 26162306a36Sopenharmony_ci u32 max_tid; 26262306a36Sopenharmony_ci}; 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cistruct cudbg_tid_data { 26562306a36Sopenharmony_ci u32 tid; 26662306a36Sopenharmony_ci u32 dbig_cmd; 26762306a36Sopenharmony_ci u32 dbig_conf; 26862306a36Sopenharmony_ci u32 dbig_rsp_stat; 26962306a36Sopenharmony_ci u32 data[NUM_LE_DB_DBGI_RSP_DATA_INSTANCES]; 27062306a36Sopenharmony_ci}; 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci#define CUDBG_NUM_ULPTX 11 27362306a36Sopenharmony_ci#define CUDBG_NUM_ULPTX_READ 512 27462306a36Sopenharmony_ci#define CUDBG_NUM_ULPTX_ASIC 6 27562306a36Sopenharmony_ci#define CUDBG_NUM_ULPTX_ASIC_READ 128 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci#define CUDBG_ULPTX_LA_REV 1 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_cistruct cudbg_ulptx_la { 28062306a36Sopenharmony_ci u32 rdptr[CUDBG_NUM_ULPTX]; 28162306a36Sopenharmony_ci u32 wrptr[CUDBG_NUM_ULPTX]; 28262306a36Sopenharmony_ci u32 rddata[CUDBG_NUM_ULPTX]; 28362306a36Sopenharmony_ci u32 rd_data[CUDBG_NUM_ULPTX][CUDBG_NUM_ULPTX_READ]; 28462306a36Sopenharmony_ci u32 rdptr_asic[CUDBG_NUM_ULPTX_ASIC_READ]; 28562306a36Sopenharmony_ci u32 rddata_asic[CUDBG_NUM_ULPTX_ASIC_READ][CUDBG_NUM_ULPTX_ASIC]; 28662306a36Sopenharmony_ci}; 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci#define CUDBG_CHAC_PBT_ADDR 0x2800 28962306a36Sopenharmony_ci#define CUDBG_CHAC_PBT_LRF 0x3000 29062306a36Sopenharmony_ci#define CUDBG_CHAC_PBT_DATA 0x3800 29162306a36Sopenharmony_ci#define CUDBG_PBT_DYNAMIC_ENTRIES 8 29262306a36Sopenharmony_ci#define CUDBG_PBT_STATIC_ENTRIES 16 29362306a36Sopenharmony_ci#define CUDBG_LRF_ENTRIES 8 29462306a36Sopenharmony_ci#define CUDBG_PBT_DATA_ENTRIES 512 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_cistruct cudbg_pbt_tables { 29762306a36Sopenharmony_ci u32 pbt_dynamic[CUDBG_PBT_DYNAMIC_ENTRIES]; 29862306a36Sopenharmony_ci u32 pbt_static[CUDBG_PBT_STATIC_ENTRIES]; 29962306a36Sopenharmony_ci u32 lrf_table[CUDBG_LRF_ENTRIES]; 30062306a36Sopenharmony_ci u32 pbt_data[CUDBG_PBT_DATA_ENTRIES]; 30162306a36Sopenharmony_ci}; 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_cienum cudbg_qdesc_qtype { 30462306a36Sopenharmony_ci CUDBG_QTYPE_UNKNOWN = 0, 30562306a36Sopenharmony_ci CUDBG_QTYPE_NIC_TXQ, 30662306a36Sopenharmony_ci CUDBG_QTYPE_NIC_RXQ, 30762306a36Sopenharmony_ci CUDBG_QTYPE_NIC_FLQ, 30862306a36Sopenharmony_ci CUDBG_QTYPE_CTRLQ, 30962306a36Sopenharmony_ci CUDBG_QTYPE_FWEVTQ, 31062306a36Sopenharmony_ci CUDBG_QTYPE_INTRQ, 31162306a36Sopenharmony_ci CUDBG_QTYPE_PTP_TXQ, 31262306a36Sopenharmony_ci CUDBG_QTYPE_OFLD_TXQ, 31362306a36Sopenharmony_ci CUDBG_QTYPE_RDMA_RXQ, 31462306a36Sopenharmony_ci CUDBG_QTYPE_RDMA_FLQ, 31562306a36Sopenharmony_ci CUDBG_QTYPE_RDMA_CIQ, 31662306a36Sopenharmony_ci CUDBG_QTYPE_ISCSI_RXQ, 31762306a36Sopenharmony_ci CUDBG_QTYPE_ISCSI_FLQ, 31862306a36Sopenharmony_ci CUDBG_QTYPE_ISCSIT_RXQ, 31962306a36Sopenharmony_ci CUDBG_QTYPE_ISCSIT_FLQ, 32062306a36Sopenharmony_ci CUDBG_QTYPE_CRYPTO_TXQ, 32162306a36Sopenharmony_ci CUDBG_QTYPE_CRYPTO_RXQ, 32262306a36Sopenharmony_ci CUDBG_QTYPE_CRYPTO_FLQ, 32362306a36Sopenharmony_ci CUDBG_QTYPE_TLS_RXQ, 32462306a36Sopenharmony_ci CUDBG_QTYPE_TLS_FLQ, 32562306a36Sopenharmony_ci CUDBG_QTYPE_ETHOFLD_TXQ, 32662306a36Sopenharmony_ci CUDBG_QTYPE_ETHOFLD_RXQ, 32762306a36Sopenharmony_ci CUDBG_QTYPE_ETHOFLD_FLQ, 32862306a36Sopenharmony_ci CUDBG_QTYPE_MAX, 32962306a36Sopenharmony_ci}; 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci#define CUDBG_QDESC_REV 1 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_cistruct cudbg_qdesc_entry { 33462306a36Sopenharmony_ci u32 data_size; 33562306a36Sopenharmony_ci u32 qtype; 33662306a36Sopenharmony_ci u32 qid; 33762306a36Sopenharmony_ci u32 desc_size; 33862306a36Sopenharmony_ci u32 num_desc; 33962306a36Sopenharmony_ci u8 data[]; /* Must be last */ 34062306a36Sopenharmony_ci}; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_cistruct cudbg_qdesc_info { 34362306a36Sopenharmony_ci u32 qdesc_entry_size; 34462306a36Sopenharmony_ci u32 num_queues; 34562306a36Sopenharmony_ci u8 data[]; /* Must be last */ 34662306a36Sopenharmony_ci}; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci#define IREG_NUM_ELEM 4 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci#define CUDBG_NUM_PCIE_CONFIG_REGS 0x61 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci#endif /* __CUDBG_ENTITY_H__ */ 353