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