1ee824f4bSOmkar Kulkarni /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2ee824f4bSOmkar Kulkarni /* QLogic qed NIC Driver 3ee824f4bSOmkar Kulkarni * Copyright (c) 2019-2021 Marvell International Ltd. 4ee824f4bSOmkar Kulkarni */ 5ee824f4bSOmkar Kulkarni #ifndef _QED_DBG_HSI_H 6ee824f4bSOmkar Kulkarni #define _QED_DBG_HSI_H 7ee824f4bSOmkar Kulkarni 8ee824f4bSOmkar Kulkarni #include <linux/types.h> 9ee824f4bSOmkar Kulkarni #include <linux/io.h> 10ee824f4bSOmkar Kulkarni #include <linux/bitops.h> 11ee824f4bSOmkar Kulkarni #include <linux/delay.h> 12ee824f4bSOmkar Kulkarni #include <linux/kernel.h> 13ee824f4bSOmkar Kulkarni #include <linux/list.h> 14ee824f4bSOmkar Kulkarni #include <linux/slab.h> 15ee824f4bSOmkar Kulkarni 16ee824f4bSOmkar Kulkarni /****************************************/ 17ee824f4bSOmkar Kulkarni /* Debug Tools HSI constants and macros */ 18ee824f4bSOmkar Kulkarni /****************************************/ 19ee824f4bSOmkar Kulkarni 20ee824f4bSOmkar Kulkarni enum block_id { 21ee824f4bSOmkar Kulkarni BLOCK_GRC, 22ee824f4bSOmkar Kulkarni BLOCK_MISCS, 23ee824f4bSOmkar Kulkarni BLOCK_MISC, 24ee824f4bSOmkar Kulkarni BLOCK_DBU, 25ee824f4bSOmkar Kulkarni BLOCK_PGLUE_B, 26ee824f4bSOmkar Kulkarni BLOCK_CNIG, 27ee824f4bSOmkar Kulkarni BLOCK_CPMU, 28ee824f4bSOmkar Kulkarni BLOCK_NCSI, 29ee824f4bSOmkar Kulkarni BLOCK_OPTE, 30ee824f4bSOmkar Kulkarni BLOCK_BMB, 31ee824f4bSOmkar Kulkarni BLOCK_PCIE, 32ee824f4bSOmkar Kulkarni BLOCK_MCP, 33ee824f4bSOmkar Kulkarni BLOCK_MCP2, 34ee824f4bSOmkar Kulkarni BLOCK_PSWHST, 35ee824f4bSOmkar Kulkarni BLOCK_PSWHST2, 36ee824f4bSOmkar Kulkarni BLOCK_PSWRD, 37ee824f4bSOmkar Kulkarni BLOCK_PSWRD2, 38ee824f4bSOmkar Kulkarni BLOCK_PSWWR, 39ee824f4bSOmkar Kulkarni BLOCK_PSWWR2, 40ee824f4bSOmkar Kulkarni BLOCK_PSWRQ, 41ee824f4bSOmkar Kulkarni BLOCK_PSWRQ2, 42ee824f4bSOmkar Kulkarni BLOCK_PGLCS, 43ee824f4bSOmkar Kulkarni BLOCK_DMAE, 44ee824f4bSOmkar Kulkarni BLOCK_PTU, 45ee824f4bSOmkar Kulkarni BLOCK_TCM, 46ee824f4bSOmkar Kulkarni BLOCK_MCM, 47ee824f4bSOmkar Kulkarni BLOCK_UCM, 48ee824f4bSOmkar Kulkarni BLOCK_XCM, 49ee824f4bSOmkar Kulkarni BLOCK_YCM, 50ee824f4bSOmkar Kulkarni BLOCK_PCM, 51ee824f4bSOmkar Kulkarni BLOCK_QM, 52ee824f4bSOmkar Kulkarni BLOCK_TM, 53ee824f4bSOmkar Kulkarni BLOCK_DORQ, 54ee824f4bSOmkar Kulkarni BLOCK_BRB, 55ee824f4bSOmkar Kulkarni BLOCK_SRC, 56ee824f4bSOmkar Kulkarni BLOCK_PRS, 57ee824f4bSOmkar Kulkarni BLOCK_TSDM, 58ee824f4bSOmkar Kulkarni BLOCK_MSDM, 59ee824f4bSOmkar Kulkarni BLOCK_USDM, 60ee824f4bSOmkar Kulkarni BLOCK_XSDM, 61ee824f4bSOmkar Kulkarni BLOCK_YSDM, 62ee824f4bSOmkar Kulkarni BLOCK_PSDM, 63ee824f4bSOmkar Kulkarni BLOCK_TSEM, 64ee824f4bSOmkar Kulkarni BLOCK_MSEM, 65ee824f4bSOmkar Kulkarni BLOCK_USEM, 66ee824f4bSOmkar Kulkarni BLOCK_XSEM, 67ee824f4bSOmkar Kulkarni BLOCK_YSEM, 68ee824f4bSOmkar Kulkarni BLOCK_PSEM, 69ee824f4bSOmkar Kulkarni BLOCK_RSS, 70ee824f4bSOmkar Kulkarni BLOCK_TMLD, 71ee824f4bSOmkar Kulkarni BLOCK_MULD, 72ee824f4bSOmkar Kulkarni BLOCK_YULD, 73ee824f4bSOmkar Kulkarni BLOCK_XYLD, 74ee824f4bSOmkar Kulkarni BLOCK_PRM, 75ee824f4bSOmkar Kulkarni BLOCK_PBF_PB1, 76ee824f4bSOmkar Kulkarni BLOCK_PBF_PB2, 77ee824f4bSOmkar Kulkarni BLOCK_RPB, 78ee824f4bSOmkar Kulkarni BLOCK_BTB, 79ee824f4bSOmkar Kulkarni BLOCK_PBF, 80ee824f4bSOmkar Kulkarni BLOCK_RDIF, 81ee824f4bSOmkar Kulkarni BLOCK_TDIF, 82ee824f4bSOmkar Kulkarni BLOCK_CDU, 83ee824f4bSOmkar Kulkarni BLOCK_CCFC, 84ee824f4bSOmkar Kulkarni BLOCK_TCFC, 85ee824f4bSOmkar Kulkarni BLOCK_IGU, 86ee824f4bSOmkar Kulkarni BLOCK_CAU, 87ee824f4bSOmkar Kulkarni BLOCK_UMAC, 88ee824f4bSOmkar Kulkarni BLOCK_XMAC, 89ee824f4bSOmkar Kulkarni BLOCK_MSTAT, 90ee824f4bSOmkar Kulkarni BLOCK_DBG, 91ee824f4bSOmkar Kulkarni BLOCK_NIG, 92ee824f4bSOmkar Kulkarni BLOCK_WOL, 93ee824f4bSOmkar Kulkarni BLOCK_BMBN, 94ee824f4bSOmkar Kulkarni BLOCK_IPC, 95ee824f4bSOmkar Kulkarni BLOCK_NWM, 96ee824f4bSOmkar Kulkarni BLOCK_NWS, 97ee824f4bSOmkar Kulkarni BLOCK_MS, 98ee824f4bSOmkar Kulkarni BLOCK_PHY_PCIE, 99ee824f4bSOmkar Kulkarni BLOCK_LED, 100ee824f4bSOmkar Kulkarni BLOCK_AVS_WRAP, 101ee824f4bSOmkar Kulkarni BLOCK_PXPREQBUS, 102ee824f4bSOmkar Kulkarni BLOCK_BAR0_MAP, 103ee824f4bSOmkar Kulkarni BLOCK_MCP_FIO, 104ee824f4bSOmkar Kulkarni BLOCK_LAST_INIT, 105ee824f4bSOmkar Kulkarni BLOCK_PRS_FC, 106ee824f4bSOmkar Kulkarni BLOCK_PBF_FC, 107ee824f4bSOmkar Kulkarni BLOCK_NIG_LB_FC, 108ee824f4bSOmkar Kulkarni BLOCK_NIG_LB_FC_PLLH, 109ee824f4bSOmkar Kulkarni BLOCK_NIG_TX_FC_PLLH, 110ee824f4bSOmkar Kulkarni BLOCK_NIG_TX_FC, 111ee824f4bSOmkar Kulkarni BLOCK_NIG_RX_FC_PLLH, 112ee824f4bSOmkar Kulkarni BLOCK_NIG_RX_FC, 113ee824f4bSOmkar Kulkarni MAX_BLOCK_ID 114ee824f4bSOmkar Kulkarni }; 115ee824f4bSOmkar Kulkarni 116ee824f4bSOmkar Kulkarni /* binary debug buffer types */ 117ee824f4bSOmkar Kulkarni enum bin_dbg_buffer_type { 118ee824f4bSOmkar Kulkarni BIN_BUF_DBG_MODE_TREE, 119ee824f4bSOmkar Kulkarni BIN_BUF_DBG_DUMP_REG, 120ee824f4bSOmkar Kulkarni BIN_BUF_DBG_DUMP_MEM, 121ee824f4bSOmkar Kulkarni BIN_BUF_DBG_IDLE_CHK_REGS, 122ee824f4bSOmkar Kulkarni BIN_BUF_DBG_IDLE_CHK_IMMS, 123ee824f4bSOmkar Kulkarni BIN_BUF_DBG_IDLE_CHK_RULES, 124ee824f4bSOmkar Kulkarni BIN_BUF_DBG_IDLE_CHK_PARSING_DATA, 125ee824f4bSOmkar Kulkarni BIN_BUF_DBG_ATTN_BLOCKS, 126ee824f4bSOmkar Kulkarni BIN_BUF_DBG_ATTN_REGS, 127ee824f4bSOmkar Kulkarni BIN_BUF_DBG_ATTN_INDEXES, 128ee824f4bSOmkar Kulkarni BIN_BUF_DBG_ATTN_NAME_OFFSETS, 129ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BLOCKS, 130ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BLOCKS_CHIP_DATA, 131ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BUS_LINES, 132ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BLOCKS_USER_DATA, 133ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BLOCKS_CHIP_USER_DATA, 134ee824f4bSOmkar Kulkarni BIN_BUF_DBG_BUS_LINE_NAME_OFFSETS, 135ee824f4bSOmkar Kulkarni BIN_BUF_DBG_RESET_REGS, 136ee824f4bSOmkar Kulkarni BIN_BUF_DBG_PARSING_STRINGS, 137ee824f4bSOmkar Kulkarni MAX_BIN_DBG_BUFFER_TYPE 138ee824f4bSOmkar Kulkarni }; 139ee824f4bSOmkar Kulkarni 140ee824f4bSOmkar Kulkarni /* Attention bit mapping */ 141ee824f4bSOmkar Kulkarni struct dbg_attn_bit_mapping { 142ee824f4bSOmkar Kulkarni u16 data; 143ee824f4bSOmkar Kulkarni #define DBG_ATTN_BIT_MAPPING_VAL_MASK 0x7FFF 144ee824f4bSOmkar Kulkarni #define DBG_ATTN_BIT_MAPPING_VAL_SHIFT 0 145ee824f4bSOmkar Kulkarni #define DBG_ATTN_BIT_MAPPING_IS_UNUSED_BIT_CNT_MASK 0x1 146ee824f4bSOmkar Kulkarni #define DBG_ATTN_BIT_MAPPING_IS_UNUSED_BIT_CNT_SHIFT 15 147ee824f4bSOmkar Kulkarni }; 148ee824f4bSOmkar Kulkarni 149ee824f4bSOmkar Kulkarni /* Attention block per-type data */ 150ee824f4bSOmkar Kulkarni struct dbg_attn_block_type_data { 151ee824f4bSOmkar Kulkarni u16 names_offset; 152ee824f4bSOmkar Kulkarni u16 reserved1; 153ee824f4bSOmkar Kulkarni u8 num_regs; 154ee824f4bSOmkar Kulkarni u8 reserved2; 155ee824f4bSOmkar Kulkarni u16 regs_offset; 156ee824f4bSOmkar Kulkarni 157ee824f4bSOmkar Kulkarni }; 158ee824f4bSOmkar Kulkarni 159ee824f4bSOmkar Kulkarni /* Block attentions */ 160ee824f4bSOmkar Kulkarni struct dbg_attn_block { 161ee824f4bSOmkar Kulkarni struct dbg_attn_block_type_data per_type_data[2]; 162ee824f4bSOmkar Kulkarni }; 163ee824f4bSOmkar Kulkarni 164ee824f4bSOmkar Kulkarni /* Attention register result */ 165ee824f4bSOmkar Kulkarni struct dbg_attn_reg_result { 166ee824f4bSOmkar Kulkarni u32 data; 167ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_RESULT_STS_ADDRESS_MASK 0xFFFFFF 168ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_RESULT_STS_ADDRESS_SHIFT 0 169ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_MASK 0xFF 170ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_SHIFT 24 171ee824f4bSOmkar Kulkarni u16 block_attn_offset; 172ee824f4bSOmkar Kulkarni u16 reserved; 173ee824f4bSOmkar Kulkarni u32 sts_val; 174ee824f4bSOmkar Kulkarni u32 mask_val; 175ee824f4bSOmkar Kulkarni }; 176ee824f4bSOmkar Kulkarni 177ee824f4bSOmkar Kulkarni /* Attention block result */ 178ee824f4bSOmkar Kulkarni struct dbg_attn_block_result { 179ee824f4bSOmkar Kulkarni u8 block_id; 180ee824f4bSOmkar Kulkarni u8 data; 181ee824f4bSOmkar Kulkarni #define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_MASK 0x3 182ee824f4bSOmkar Kulkarni #define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_SHIFT 0 183ee824f4bSOmkar Kulkarni #define DBG_ATTN_BLOCK_RESULT_NUM_REGS_MASK 0x3F 184ee824f4bSOmkar Kulkarni #define DBG_ATTN_BLOCK_RESULT_NUM_REGS_SHIFT 2 185ee824f4bSOmkar Kulkarni u16 names_offset; 186ee824f4bSOmkar Kulkarni struct dbg_attn_reg_result reg_results[15]; 187ee824f4bSOmkar Kulkarni }; 188ee824f4bSOmkar Kulkarni 189ee824f4bSOmkar Kulkarni /* Mode header */ 190ee824f4bSOmkar Kulkarni struct dbg_mode_hdr { 191ee824f4bSOmkar Kulkarni u16 data; 192ee824f4bSOmkar Kulkarni #define DBG_MODE_HDR_EVAL_MODE_MASK 0x1 193ee824f4bSOmkar Kulkarni #define DBG_MODE_HDR_EVAL_MODE_SHIFT 0 194ee824f4bSOmkar Kulkarni #define DBG_MODE_HDR_MODES_BUF_OFFSET_MASK 0x7FFF 195ee824f4bSOmkar Kulkarni #define DBG_MODE_HDR_MODES_BUF_OFFSET_SHIFT 1 196ee824f4bSOmkar Kulkarni }; 197ee824f4bSOmkar Kulkarni 198ee824f4bSOmkar Kulkarni /* Attention register */ 199ee824f4bSOmkar Kulkarni struct dbg_attn_reg { 200ee824f4bSOmkar Kulkarni struct dbg_mode_hdr mode; 201ee824f4bSOmkar Kulkarni u16 block_attn_offset; 202ee824f4bSOmkar Kulkarni u32 data; 203ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_STS_ADDRESS_MASK 0xFFFFFF 204ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_STS_ADDRESS_SHIFT 0 205ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_NUM_REG_ATTN_MASK 0xFF 206ee824f4bSOmkar Kulkarni #define DBG_ATTN_REG_NUM_REG_ATTN_SHIFT 24 207ee824f4bSOmkar Kulkarni u32 sts_clr_address; 208ee824f4bSOmkar Kulkarni u32 mask_address; 209ee824f4bSOmkar Kulkarni }; 210ee824f4bSOmkar Kulkarni 211ee824f4bSOmkar Kulkarni /* Attention types */ 212ee824f4bSOmkar Kulkarni enum dbg_attn_type { 213ee824f4bSOmkar Kulkarni ATTN_TYPE_INTERRUPT, 214ee824f4bSOmkar Kulkarni ATTN_TYPE_PARITY, 215ee824f4bSOmkar Kulkarni MAX_DBG_ATTN_TYPE 216ee824f4bSOmkar Kulkarni }; 217ee824f4bSOmkar Kulkarni 218ee824f4bSOmkar Kulkarni /* Block debug data */ 219ee824f4bSOmkar Kulkarni struct dbg_block { 220ee824f4bSOmkar Kulkarni u8 name[15]; 221ee824f4bSOmkar Kulkarni u8 associated_storm_letter; 222ee824f4bSOmkar Kulkarni }; 223ee824f4bSOmkar Kulkarni 224ee824f4bSOmkar Kulkarni /* Chip-specific block debug data */ 225ee824f4bSOmkar Kulkarni struct dbg_block_chip { 226ee824f4bSOmkar Kulkarni u8 flags; 227ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_IS_REMOVED_MASK 0x1 228ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_IS_REMOVED_SHIFT 0 229ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_RESET_REG_MASK 0x1 230ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_RESET_REG_SHIFT 1 231ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_UNRESET_BEFORE_DUMP_MASK 0x1 232ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_UNRESET_BEFORE_DUMP_SHIFT 2 233ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_DBG_BUS_MASK 0x1 234ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_DBG_BUS_SHIFT 3 235ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS_MASK 0x1 236ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS_SHIFT 4 237ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_RESERVED0_MASK 0x7 238ee824f4bSOmkar Kulkarni #define DBG_BLOCK_CHIP_RESERVED0_SHIFT 5 239ee824f4bSOmkar Kulkarni u8 dbg_client_id; 240ee824f4bSOmkar Kulkarni u8 reset_reg_id; 241ee824f4bSOmkar Kulkarni u8 reset_reg_bit_offset; 242ee824f4bSOmkar Kulkarni struct dbg_mode_hdr dbg_bus_mode; 243ee824f4bSOmkar Kulkarni u16 reserved1; 244ee824f4bSOmkar Kulkarni u8 reserved2; 245ee824f4bSOmkar Kulkarni u8 num_of_dbg_bus_lines; 246ee824f4bSOmkar Kulkarni u16 dbg_bus_lines_offset; 247ee824f4bSOmkar Kulkarni u32 dbg_select_reg_addr; 248ee824f4bSOmkar Kulkarni u32 dbg_dword_enable_reg_addr; 249ee824f4bSOmkar Kulkarni u32 dbg_shift_reg_addr; 250ee824f4bSOmkar Kulkarni u32 dbg_force_valid_reg_addr; 251ee824f4bSOmkar Kulkarni u32 dbg_force_frame_reg_addr; 252ee824f4bSOmkar Kulkarni }; 253ee824f4bSOmkar Kulkarni 254ee824f4bSOmkar Kulkarni /* Chip-specific block user debug data */ 255ee824f4bSOmkar Kulkarni struct dbg_block_chip_user { 256ee824f4bSOmkar Kulkarni u8 num_of_dbg_bus_lines; 257ee824f4bSOmkar Kulkarni u8 has_latency_events; 258ee824f4bSOmkar Kulkarni u16 names_offset; 259ee824f4bSOmkar Kulkarni }; 260ee824f4bSOmkar Kulkarni 261ee824f4bSOmkar Kulkarni /* Block user debug data */ 262ee824f4bSOmkar Kulkarni struct dbg_block_user { 263ee824f4bSOmkar Kulkarni u8 name[16]; 264ee824f4bSOmkar Kulkarni }; 265ee824f4bSOmkar Kulkarni 266ee824f4bSOmkar Kulkarni /* Block Debug line data */ 267ee824f4bSOmkar Kulkarni struct dbg_bus_line { 268ee824f4bSOmkar Kulkarni u8 data; 269ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_NUM_OF_GROUPS_MASK 0xF 270ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_NUM_OF_GROUPS_SHIFT 0 271ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_IS_256B_MASK 0x1 272ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_IS_256B_SHIFT 4 273ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_RESERVED_MASK 0x7 274ee824f4bSOmkar Kulkarni #define DBG_BUS_LINE_RESERVED_SHIFT 5 275ee824f4bSOmkar Kulkarni u8 group_sizes; 276ee824f4bSOmkar Kulkarni }; 277ee824f4bSOmkar Kulkarni 278ee824f4bSOmkar Kulkarni /* Condition header for registers dump */ 279ee824f4bSOmkar Kulkarni struct dbg_dump_cond_hdr { 280ee824f4bSOmkar Kulkarni struct dbg_mode_hdr mode; /* Mode header */ 281ee824f4bSOmkar Kulkarni u8 block_id; /* block ID */ 282ee824f4bSOmkar Kulkarni u8 data_size; /* size in dwords of the data following this header */ 283ee824f4bSOmkar Kulkarni }; 284ee824f4bSOmkar Kulkarni 285ee824f4bSOmkar Kulkarni /* Memory data for registers dump */ 286ee824f4bSOmkar Kulkarni struct dbg_dump_mem { 287ee824f4bSOmkar Kulkarni u32 dword0; 288ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_ADDRESS_MASK 0xFFFFFF 289ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_ADDRESS_SHIFT 0 290ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_MEM_GROUP_ID_MASK 0xFF 291ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_MEM_GROUP_ID_SHIFT 24 292ee824f4bSOmkar Kulkarni u32 dword1; 293ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_LENGTH_MASK 0xFFFFFF 294ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_LENGTH_SHIFT 0 295ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_WIDE_BUS_MASK 0x1 296ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_WIDE_BUS_SHIFT 24 297ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_RESERVED_MASK 0x7F 298ee824f4bSOmkar Kulkarni #define DBG_DUMP_MEM_RESERVED_SHIFT 25 299ee824f4bSOmkar Kulkarni }; 300ee824f4bSOmkar Kulkarni 301ee824f4bSOmkar Kulkarni /* Register data for registers dump */ 302ee824f4bSOmkar Kulkarni struct dbg_dump_reg { 303ee824f4bSOmkar Kulkarni u32 data; 304ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_ADDRESS_MASK 0x7FFFFF 305ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_ADDRESS_SHIFT 0 306ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_WIDE_BUS_MASK 0x1 307ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_WIDE_BUS_SHIFT 23 308ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_LENGTH_MASK 0xFF 309ee824f4bSOmkar Kulkarni #define DBG_DUMP_REG_LENGTH_SHIFT 24 310ee824f4bSOmkar Kulkarni }; 311ee824f4bSOmkar Kulkarni 312ee824f4bSOmkar Kulkarni /* Split header for registers dump */ 313ee824f4bSOmkar Kulkarni struct dbg_dump_split_hdr { 314ee824f4bSOmkar Kulkarni u32 hdr; 315ee824f4bSOmkar Kulkarni #define DBG_DUMP_SPLIT_HDR_DATA_SIZE_MASK 0xFFFFFF 316ee824f4bSOmkar Kulkarni #define DBG_DUMP_SPLIT_HDR_DATA_SIZE_SHIFT 0 317ee824f4bSOmkar Kulkarni #define DBG_DUMP_SPLIT_HDR_SPLIT_TYPE_ID_MASK 0xFF 318ee824f4bSOmkar Kulkarni #define DBG_DUMP_SPLIT_HDR_SPLIT_TYPE_ID_SHIFT 24 319ee824f4bSOmkar Kulkarni }; 320ee824f4bSOmkar Kulkarni 321ee824f4bSOmkar Kulkarni /* Condition header for idle check */ 322ee824f4bSOmkar Kulkarni struct dbg_idle_chk_cond_hdr { 323ee824f4bSOmkar Kulkarni struct dbg_mode_hdr mode; /* Mode header */ 324ee824f4bSOmkar Kulkarni u16 data_size; /* size in dwords of the data following this header */ 325ee824f4bSOmkar Kulkarni }; 326ee824f4bSOmkar Kulkarni 327ee824f4bSOmkar Kulkarni /* Idle Check condition register */ 328ee824f4bSOmkar Kulkarni struct dbg_idle_chk_cond_reg { 329ee824f4bSOmkar Kulkarni u32 data; 330ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_ADDRESS_MASK 0x7FFFFF 331ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_ADDRESS_SHIFT 0 332ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_WIDE_BUS_MASK 0x1 333ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_WIDE_BUS_SHIFT 23 334ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_BLOCK_ID_MASK 0xFF 335ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_COND_REG_BLOCK_ID_SHIFT 24 336ee824f4bSOmkar Kulkarni u16 num_entries; 337ee824f4bSOmkar Kulkarni u8 entry_size; 338ee824f4bSOmkar Kulkarni u8 start_entry; 339ee824f4bSOmkar Kulkarni }; 340ee824f4bSOmkar Kulkarni 341ee824f4bSOmkar Kulkarni /* Idle Check info register */ 342ee824f4bSOmkar Kulkarni struct dbg_idle_chk_info_reg { 343ee824f4bSOmkar Kulkarni u32 data; 344ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_ADDRESS_MASK 0x7FFFFF 345ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_ADDRESS_SHIFT 0 346ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_MASK 0x1 347ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_SHIFT 23 348ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_MASK 0xFF 349ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_SHIFT 24 350ee824f4bSOmkar Kulkarni u16 size; /* register size in dwords */ 351ee824f4bSOmkar Kulkarni struct dbg_mode_hdr mode; /* Mode header */ 352ee824f4bSOmkar Kulkarni }; 353ee824f4bSOmkar Kulkarni 354ee824f4bSOmkar Kulkarni /* Idle Check register */ 355ee824f4bSOmkar Kulkarni union dbg_idle_chk_reg { 356ee824f4bSOmkar Kulkarni struct dbg_idle_chk_cond_reg cond_reg; /* condition register */ 357ee824f4bSOmkar Kulkarni struct dbg_idle_chk_info_reg info_reg; /* info register */ 358ee824f4bSOmkar Kulkarni }; 359ee824f4bSOmkar Kulkarni 360ee824f4bSOmkar Kulkarni /* Idle Check result header */ 361ee824f4bSOmkar Kulkarni struct dbg_idle_chk_result_hdr { 362ee824f4bSOmkar Kulkarni u16 rule_id; /* Failing rule index */ 363ee824f4bSOmkar Kulkarni u16 mem_entry_id; /* Failing memory entry index */ 364ee824f4bSOmkar Kulkarni u8 num_dumped_cond_regs; /* number of dumped condition registers */ 365ee824f4bSOmkar Kulkarni u8 num_dumped_info_regs; /* number of dumped condition registers */ 366ee824f4bSOmkar Kulkarni u8 severity; /* from dbg_idle_chk_severity_types enum */ 367ee824f4bSOmkar Kulkarni u8 reserved; 368ee824f4bSOmkar Kulkarni }; 369ee824f4bSOmkar Kulkarni 370ee824f4bSOmkar Kulkarni /* Idle Check result register header */ 371ee824f4bSOmkar Kulkarni struct dbg_idle_chk_result_reg_hdr { 372ee824f4bSOmkar Kulkarni u8 data; 373ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RESULT_REG_HDR_IS_MEM_MASK 0x1 374ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RESULT_REG_HDR_IS_MEM_SHIFT 0 375ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_MASK 0x7F 376ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_SHIFT 1 377ee824f4bSOmkar Kulkarni u8 start_entry; /* index of the first checked entry */ 378ee824f4bSOmkar Kulkarni u16 size; /* register size in dwords */ 379ee824f4bSOmkar Kulkarni }; 380ee824f4bSOmkar Kulkarni 381ee824f4bSOmkar Kulkarni /* Idle Check rule */ 382ee824f4bSOmkar Kulkarni struct dbg_idle_chk_rule { 383ee824f4bSOmkar Kulkarni u16 rule_id; /* Idle Check rule ID */ 384ee824f4bSOmkar Kulkarni u8 severity; /* value from dbg_idle_chk_severity_types enum */ 385ee824f4bSOmkar Kulkarni u8 cond_id; /* Condition ID */ 386ee824f4bSOmkar Kulkarni u8 num_cond_regs; /* number of condition registers */ 387ee824f4bSOmkar Kulkarni u8 num_info_regs; /* number of info registers */ 388ee824f4bSOmkar Kulkarni u8 num_imms; /* number of immediates in the condition */ 389ee824f4bSOmkar Kulkarni u8 reserved1; 390ee824f4bSOmkar Kulkarni u16 reg_offset; /* offset of this rules registers in the idle check 391ee824f4bSOmkar Kulkarni * register array (in dbg_idle_chk_reg units). 392ee824f4bSOmkar Kulkarni */ 393ee824f4bSOmkar Kulkarni u16 imm_offset; /* offset of this rules immediate values in the 394ee824f4bSOmkar Kulkarni * immediate values array (in dwords). 395ee824f4bSOmkar Kulkarni */ 396ee824f4bSOmkar Kulkarni }; 397ee824f4bSOmkar Kulkarni 398ee824f4bSOmkar Kulkarni /* Idle Check rule parsing data */ 399ee824f4bSOmkar Kulkarni struct dbg_idle_chk_rule_parsing_data { 400ee824f4bSOmkar Kulkarni u32 data; 401ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_MASK 0x1 402ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_SHIFT 0 403ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RULE_PARSING_DATA_STR_OFFSET_MASK 0x7FFFFFFF 404ee824f4bSOmkar Kulkarni #define DBG_IDLE_CHK_RULE_PARSING_DATA_STR_OFFSET_SHIFT 1 405ee824f4bSOmkar Kulkarni }; 406ee824f4bSOmkar Kulkarni 407ee824f4bSOmkar Kulkarni /* Idle check severity types */ 408ee824f4bSOmkar Kulkarni enum dbg_idle_chk_severity_types { 409ee824f4bSOmkar Kulkarni /* idle check failure should cause an error */ 410ee824f4bSOmkar Kulkarni IDLE_CHK_SEVERITY_ERROR, 411ee824f4bSOmkar Kulkarni /* idle check failure should cause an error only if theres no traffic */ 412ee824f4bSOmkar Kulkarni IDLE_CHK_SEVERITY_ERROR_NO_TRAFFIC, 413ee824f4bSOmkar Kulkarni /* idle check failure should cause a warning */ 414ee824f4bSOmkar Kulkarni IDLE_CHK_SEVERITY_WARNING, 415ee824f4bSOmkar Kulkarni MAX_DBG_IDLE_CHK_SEVERITY_TYPES 416ee824f4bSOmkar Kulkarni }; 417ee824f4bSOmkar Kulkarni 418ee824f4bSOmkar Kulkarni /* Reset register */ 419ee824f4bSOmkar Kulkarni struct dbg_reset_reg { 420ee824f4bSOmkar Kulkarni u32 data; 421ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_ADDR_MASK 0xFFFFFF 422ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_ADDR_SHIFT 0 423ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_IS_REMOVED_MASK 0x1 424ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_IS_REMOVED_SHIFT 24 425ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_RESERVED_MASK 0x7F 426ee824f4bSOmkar Kulkarni #define DBG_RESET_REG_RESERVED_SHIFT 25 427ee824f4bSOmkar Kulkarni }; 428ee824f4bSOmkar Kulkarni 429ee824f4bSOmkar Kulkarni /* Debug Bus block data */ 430ee824f4bSOmkar Kulkarni struct dbg_bus_block_data { 431ee824f4bSOmkar Kulkarni u8 enable_mask; 432ee824f4bSOmkar Kulkarni u8 right_shift; 433ee824f4bSOmkar Kulkarni u8 force_valid_mask; 434ee824f4bSOmkar Kulkarni u8 force_frame_mask; 435ee824f4bSOmkar Kulkarni u8 dword_mask; 436ee824f4bSOmkar Kulkarni u8 line_num; 437ee824f4bSOmkar Kulkarni u8 hw_id; 438ee824f4bSOmkar Kulkarni u8 flags; 439ee824f4bSOmkar Kulkarni #define DBG_BUS_BLOCK_DATA_IS_256B_LINE_MASK 0x1 440ee824f4bSOmkar Kulkarni #define DBG_BUS_BLOCK_DATA_IS_256B_LINE_SHIFT 0 441ee824f4bSOmkar Kulkarni #define DBG_BUS_BLOCK_DATA_RESERVED_MASK 0x7F 442ee824f4bSOmkar Kulkarni #define DBG_BUS_BLOCK_DATA_RESERVED_SHIFT 1 443ee824f4bSOmkar Kulkarni }; 444ee824f4bSOmkar Kulkarni 445ee824f4bSOmkar Kulkarni enum dbg_bus_clients { 446ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCN, 447ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCP, 448ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCR, 449ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCT, 450ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCU, 451ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCF, 452ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCX, 453ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCS, 454ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCH, 455ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCZ, 456ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_OTHER_ENGINE, 457ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_TIMESTAMP, 458ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_CPU, 459ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCY, 460ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCQ, 461ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCM, 462ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCB, 463ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCW, 464ee824f4bSOmkar Kulkarni DBG_BUS_CLIENT_RBCV, 465ee824f4bSOmkar Kulkarni MAX_DBG_BUS_CLIENTS 466ee824f4bSOmkar Kulkarni }; 467ee824f4bSOmkar Kulkarni 468ee824f4bSOmkar Kulkarni /* Debug Bus constraint operation types */ 469ee824f4bSOmkar Kulkarni enum dbg_bus_constraint_ops { 470ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_EQ, 471ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_NE, 472ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_LT, 473ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_LTC, 474ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_LE, 475ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_LEC, 476ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_GT, 477ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_GTC, 478ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_GE, 479ee824f4bSOmkar Kulkarni DBG_BUS_CONSTRAINT_OP_GEC, 480ee824f4bSOmkar Kulkarni MAX_DBG_BUS_CONSTRAINT_OPS 481ee824f4bSOmkar Kulkarni }; 482ee824f4bSOmkar Kulkarni 483ee824f4bSOmkar Kulkarni /* Debug Bus trigger state data */ 484ee824f4bSOmkar Kulkarni struct dbg_bus_trigger_state_data { 485ee824f4bSOmkar Kulkarni u8 msg_len; 486ee824f4bSOmkar Kulkarni u8 constraint_dword_mask; 487ee824f4bSOmkar Kulkarni u8 storm_id; 488ee824f4bSOmkar Kulkarni u8 reserved; 489ee824f4bSOmkar Kulkarni }; 490ee824f4bSOmkar Kulkarni 491ee824f4bSOmkar Kulkarni /* Debug Bus memory address */ 492ee824f4bSOmkar Kulkarni struct dbg_bus_mem_addr { 493ee824f4bSOmkar Kulkarni u32 lo; 494ee824f4bSOmkar Kulkarni u32 hi; 495ee824f4bSOmkar Kulkarni }; 496ee824f4bSOmkar Kulkarni 497ee824f4bSOmkar Kulkarni /* Debug Bus PCI buffer data */ 498ee824f4bSOmkar Kulkarni struct dbg_bus_pci_buf_data { 499ee824f4bSOmkar Kulkarni struct dbg_bus_mem_addr phys_addr; /* PCI buffer physical address */ 500ee824f4bSOmkar Kulkarni struct dbg_bus_mem_addr virt_addr; /* PCI buffer virtual address */ 501ee824f4bSOmkar Kulkarni u32 size; /* PCI buffer size in bytes */ 502ee824f4bSOmkar Kulkarni }; 503ee824f4bSOmkar Kulkarni 504ee824f4bSOmkar Kulkarni /* Debug Bus Storm EID range filter params */ 505ee824f4bSOmkar Kulkarni struct dbg_bus_storm_eid_range_params { 506ee824f4bSOmkar Kulkarni u8 min; /* Minimal event ID to filter on */ 507ee824f4bSOmkar Kulkarni u8 max; /* Maximal event ID to filter on */ 508ee824f4bSOmkar Kulkarni }; 509ee824f4bSOmkar Kulkarni 510ee824f4bSOmkar Kulkarni /* Debug Bus Storm EID mask filter params */ 511ee824f4bSOmkar Kulkarni struct dbg_bus_storm_eid_mask_params { 512ee824f4bSOmkar Kulkarni u8 val; /* Event ID value */ 513ee824f4bSOmkar Kulkarni u8 mask; /* Event ID mask. 1s in the mask = dont care bits. */ 514ee824f4bSOmkar Kulkarni }; 515ee824f4bSOmkar Kulkarni 516ee824f4bSOmkar Kulkarni /* Debug Bus Storm EID filter params */ 517ee824f4bSOmkar Kulkarni union dbg_bus_storm_eid_params { 518ee824f4bSOmkar Kulkarni struct dbg_bus_storm_eid_range_params range; 519ee824f4bSOmkar Kulkarni struct dbg_bus_storm_eid_mask_params mask; 520ee824f4bSOmkar Kulkarni }; 521ee824f4bSOmkar Kulkarni 522ee824f4bSOmkar Kulkarni /* Debug Bus Storm data */ 523ee824f4bSOmkar Kulkarni struct dbg_bus_storm_data { 524ee824f4bSOmkar Kulkarni u8 enabled; 525ee824f4bSOmkar Kulkarni u8 mode; 526ee824f4bSOmkar Kulkarni u8 hw_id; 527ee824f4bSOmkar Kulkarni u8 eid_filter_en; 528ee824f4bSOmkar Kulkarni u8 eid_range_not_mask; 529ee824f4bSOmkar Kulkarni u8 cid_filter_en; 530ee824f4bSOmkar Kulkarni union dbg_bus_storm_eid_params eid_filter_params; 531ee824f4bSOmkar Kulkarni u32 cid; 532ee824f4bSOmkar Kulkarni }; 533ee824f4bSOmkar Kulkarni 534ee824f4bSOmkar Kulkarni /* Debug Bus data */ 535ee824f4bSOmkar Kulkarni struct dbg_bus_data { 536ee824f4bSOmkar Kulkarni u32 app_version; 537ee824f4bSOmkar Kulkarni u8 state; 538ee824f4bSOmkar Kulkarni u8 mode_256b_en; 539ee824f4bSOmkar Kulkarni u8 num_enabled_blocks; 540ee824f4bSOmkar Kulkarni u8 num_enabled_storms; 541ee824f4bSOmkar Kulkarni u8 target; 542ee824f4bSOmkar Kulkarni u8 one_shot_en; 543ee824f4bSOmkar Kulkarni u8 grc_input_en; 544ee824f4bSOmkar Kulkarni u8 timestamp_input_en; 545ee824f4bSOmkar Kulkarni u8 filter_en; 546ee824f4bSOmkar Kulkarni u8 adding_filter; 547ee824f4bSOmkar Kulkarni u8 filter_pre_trigger; 548ee824f4bSOmkar Kulkarni u8 filter_post_trigger; 549ee824f4bSOmkar Kulkarni u8 trigger_en; 550ee824f4bSOmkar Kulkarni u8 filter_constraint_dword_mask; 551ee824f4bSOmkar Kulkarni u8 next_trigger_state; 552ee824f4bSOmkar Kulkarni u8 next_constraint_id; 553ee824f4bSOmkar Kulkarni struct dbg_bus_trigger_state_data trigger_states[3]; 554ee824f4bSOmkar Kulkarni u8 filter_msg_len; 555ee824f4bSOmkar Kulkarni u8 rcv_from_other_engine; 556ee824f4bSOmkar Kulkarni u8 blocks_dword_mask; 557ee824f4bSOmkar Kulkarni u8 blocks_dword_overlap; 558ee824f4bSOmkar Kulkarni u32 hw_id_mask; 559ee824f4bSOmkar Kulkarni struct dbg_bus_pci_buf_data pci_buf; 560ee824f4bSOmkar Kulkarni struct dbg_bus_block_data blocks[132]; 561ee824f4bSOmkar Kulkarni struct dbg_bus_storm_data storms[6]; 562ee824f4bSOmkar Kulkarni }; 563ee824f4bSOmkar Kulkarni 564ee824f4bSOmkar Kulkarni /* Debug bus states */ 565ee824f4bSOmkar Kulkarni enum dbg_bus_states { 566ee824f4bSOmkar Kulkarni DBG_BUS_STATE_IDLE, 567ee824f4bSOmkar Kulkarni DBG_BUS_STATE_READY, 568ee824f4bSOmkar Kulkarni DBG_BUS_STATE_RECORDING, 569ee824f4bSOmkar Kulkarni DBG_BUS_STATE_STOPPED, 570ee824f4bSOmkar Kulkarni MAX_DBG_BUS_STATES 571ee824f4bSOmkar Kulkarni }; 572ee824f4bSOmkar Kulkarni 573ee824f4bSOmkar Kulkarni /* Debug Bus Storm modes */ 574ee824f4bSOmkar Kulkarni enum dbg_bus_storm_modes { 575ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_PRINTF, 576ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_PRAM_ADDR, 577ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_DRA_RW, 578ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_DRA_W, 579ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_LD_ST_ADDR, 580ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_DRA_FSM, 581ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_FAST_DBGMUX, 582ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_RH, 583ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_RH_WITH_STORE, 584ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_FOC, 585ee824f4bSOmkar Kulkarni DBG_BUS_STORM_MODE_EXT_STORE, 586ee824f4bSOmkar Kulkarni MAX_DBG_BUS_STORM_MODES 587ee824f4bSOmkar Kulkarni }; 588ee824f4bSOmkar Kulkarni 589ee824f4bSOmkar Kulkarni /* Debug bus target IDs */ 590ee824f4bSOmkar Kulkarni enum dbg_bus_targets { 591ee824f4bSOmkar Kulkarni DBG_BUS_TARGET_ID_INT_BUF, 592ee824f4bSOmkar Kulkarni DBG_BUS_TARGET_ID_NIG, 593ee824f4bSOmkar Kulkarni DBG_BUS_TARGET_ID_PCI, 594ee824f4bSOmkar Kulkarni MAX_DBG_BUS_TARGETS 595ee824f4bSOmkar Kulkarni }; 596ee824f4bSOmkar Kulkarni 597ee824f4bSOmkar Kulkarni /* GRC Dump data */ 598ee824f4bSOmkar Kulkarni struct dbg_grc_data { 599ee824f4bSOmkar Kulkarni u8 params_initialized; 600ee824f4bSOmkar Kulkarni u8 reserved1; 601ee824f4bSOmkar Kulkarni u16 reserved2; 602ee824f4bSOmkar Kulkarni u32 param_val[48]; 603ee824f4bSOmkar Kulkarni }; 604ee824f4bSOmkar Kulkarni 605ee824f4bSOmkar Kulkarni /* Debug GRC params */ 606ee824f4bSOmkar Kulkarni enum dbg_grc_params { 607ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_TSTORM, 608ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_MSTORM, 609ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_USTORM, 610ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_XSTORM, 611ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_YSTORM, 612ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_PSTORM, 613ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_REGS, 614ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_RAM, 615ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_PBUF, 616ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_IOR, 617ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_VFC, 618ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_CM_CTX, 619ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_PXP, 620ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_RSS, 621ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_CAU, 622ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_QM, 623ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_MCP, 624ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_DORQ, 625ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_CFC, 626ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_IGU, 627ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_BRB, 628ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_BTB, 629ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_BMB, 630ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_RESERVD1, 631ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_MULD, 632ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_PRS, 633ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_DMAE, 634ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_TM, 635ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_SDM, 636ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_DIF, 637ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_STATIC, 638ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_UNSTALL, 639ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_RESERVED2, 640ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_MCP_TRACE_META_SIZE, 641ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_EXCLUDE_ALL, 642ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_CRASH, 643ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_PARITY_SAFE, 644ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_CM, 645ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_PHY, 646ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_NO_MCP, 647ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_NO_FW_VER, 648ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_RESERVED3, 649ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_MCP_HW_DUMP, 650ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_ILT_CDUC, 651ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_ILT_CDUT, 652ee824f4bSOmkar Kulkarni DBG_GRC_PARAM_DUMP_CAU_EXT, 653ee824f4bSOmkar Kulkarni MAX_DBG_GRC_PARAMS 654ee824f4bSOmkar Kulkarni }; 655ee824f4bSOmkar Kulkarni 656ee824f4bSOmkar Kulkarni /* Debug status codes */ 657ee824f4bSOmkar Kulkarni enum dbg_status { 658ee824f4bSOmkar Kulkarni DBG_STATUS_OK, 659ee824f4bSOmkar Kulkarni DBG_STATUS_APP_VERSION_NOT_SET, 660ee824f4bSOmkar Kulkarni DBG_STATUS_UNSUPPORTED_APP_VERSION, 661ee824f4bSOmkar Kulkarni DBG_STATUS_DBG_BLOCK_NOT_RESET, 662ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_ARGS, 663ee824f4bSOmkar Kulkarni DBG_STATUS_OUTPUT_ALREADY_SET, 664ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_PCI_BUF_SIZE, 665ee824f4bSOmkar Kulkarni DBG_STATUS_PCI_BUF_ALLOC_FAILED, 666ee824f4bSOmkar Kulkarni DBG_STATUS_PCI_BUF_NOT_ALLOCATED, 667ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_FILTER_TRIGGER_DWORDS, 668ee824f4bSOmkar Kulkarni DBG_STATUS_NO_MATCHING_FRAMING_MODE, 669ee824f4bSOmkar Kulkarni DBG_STATUS_VFC_READ_ERROR, 670ee824f4bSOmkar Kulkarni DBG_STATUS_STORM_ALREADY_ENABLED, 671ee824f4bSOmkar Kulkarni DBG_STATUS_STORM_NOT_ENABLED, 672ee824f4bSOmkar Kulkarni DBG_STATUS_BLOCK_ALREADY_ENABLED, 673ee824f4bSOmkar Kulkarni DBG_STATUS_BLOCK_NOT_ENABLED, 674ee824f4bSOmkar Kulkarni DBG_STATUS_NO_INPUT_ENABLED, 675ee824f4bSOmkar Kulkarni DBG_STATUS_NO_FILTER_TRIGGER_256B, 676ee824f4bSOmkar Kulkarni DBG_STATUS_FILTER_ALREADY_ENABLED, 677ee824f4bSOmkar Kulkarni DBG_STATUS_TRIGGER_ALREADY_ENABLED, 678ee824f4bSOmkar Kulkarni DBG_STATUS_TRIGGER_NOT_ENABLED, 679ee824f4bSOmkar Kulkarni DBG_STATUS_CANT_ADD_CONSTRAINT, 680ee824f4bSOmkar Kulkarni DBG_STATUS_TOO_MANY_TRIGGER_STATES, 681ee824f4bSOmkar Kulkarni DBG_STATUS_TOO_MANY_CONSTRAINTS, 682ee824f4bSOmkar Kulkarni DBG_STATUS_RECORDING_NOT_STARTED, 683ee824f4bSOmkar Kulkarni DBG_STATUS_DATA_DIDNT_TRIGGER, 684ee824f4bSOmkar Kulkarni DBG_STATUS_NO_DATA_RECORDED, 685ee824f4bSOmkar Kulkarni DBG_STATUS_DUMP_BUF_TOO_SMALL, 686ee824f4bSOmkar Kulkarni DBG_STATUS_DUMP_NOT_CHUNK_ALIGNED, 687ee824f4bSOmkar Kulkarni DBG_STATUS_UNKNOWN_CHIP, 688ee824f4bSOmkar Kulkarni DBG_STATUS_VIRT_MEM_ALLOC_FAILED, 689ee824f4bSOmkar Kulkarni DBG_STATUS_BLOCK_IN_RESET, 690ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_TRACE_SIGNATURE, 691ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_NVRAM_BUNDLE, 692ee824f4bSOmkar Kulkarni DBG_STATUS_NVRAM_GET_IMAGE_FAILED, 693ee824f4bSOmkar Kulkarni DBG_STATUS_NON_ALIGNED_NVRAM_IMAGE, 694ee824f4bSOmkar Kulkarni DBG_STATUS_NVRAM_READ_FAILED, 695ee824f4bSOmkar Kulkarni DBG_STATUS_IDLE_CHK_PARSE_FAILED, 696ee824f4bSOmkar Kulkarni DBG_STATUS_MCP_TRACE_BAD_DATA, 697ee824f4bSOmkar Kulkarni DBG_STATUS_MCP_TRACE_NO_META, 698ee824f4bSOmkar Kulkarni DBG_STATUS_MCP_COULD_NOT_HALT, 699ee824f4bSOmkar Kulkarni DBG_STATUS_MCP_COULD_NOT_RESUME, 700ee824f4bSOmkar Kulkarni DBG_STATUS_RESERVED0, 701ee824f4bSOmkar Kulkarni DBG_STATUS_SEMI_FIFO_NOT_EMPTY, 702ee824f4bSOmkar Kulkarni DBG_STATUS_IGU_FIFO_BAD_DATA, 703ee824f4bSOmkar Kulkarni DBG_STATUS_MCP_COULD_NOT_MASK_PRTY, 704ee824f4bSOmkar Kulkarni DBG_STATUS_FW_ASSERTS_PARSE_FAILED, 705ee824f4bSOmkar Kulkarni DBG_STATUS_REG_FIFO_BAD_DATA, 706ee824f4bSOmkar Kulkarni DBG_STATUS_PROTECTION_OVERRIDE_BAD_DATA, 707ee824f4bSOmkar Kulkarni DBG_STATUS_DBG_ARRAY_NOT_SET, 708ee824f4bSOmkar Kulkarni DBG_STATUS_RESERVED1, 709ee824f4bSOmkar Kulkarni DBG_STATUS_NON_MATCHING_LINES, 710ee824f4bSOmkar Kulkarni DBG_STATUS_INSUFFICIENT_HW_IDS, 711ee824f4bSOmkar Kulkarni DBG_STATUS_DBG_BUS_IN_USE, 712ee824f4bSOmkar Kulkarni DBG_STATUS_INVALID_STORM_DBG_MODE, 713ee824f4bSOmkar Kulkarni DBG_STATUS_OTHER_ENGINE_BB_ONLY, 714ee824f4bSOmkar Kulkarni DBG_STATUS_FILTER_SINGLE_HW_ID, 715ee824f4bSOmkar Kulkarni DBG_STATUS_TRIGGER_SINGLE_HW_ID, 716ee824f4bSOmkar Kulkarni DBG_STATUS_MISSING_TRIGGER_STATE_STORM, 717ee824f4bSOmkar Kulkarni MAX_DBG_STATUS 718ee824f4bSOmkar Kulkarni }; 719ee824f4bSOmkar Kulkarni 720ee824f4bSOmkar Kulkarni /* Debug Storms IDs */ 721ee824f4bSOmkar Kulkarni enum dbg_storms { 722ee824f4bSOmkar Kulkarni DBG_TSTORM_ID, 723ee824f4bSOmkar Kulkarni DBG_MSTORM_ID, 724ee824f4bSOmkar Kulkarni DBG_USTORM_ID, 725ee824f4bSOmkar Kulkarni DBG_XSTORM_ID, 726ee824f4bSOmkar Kulkarni DBG_YSTORM_ID, 727ee824f4bSOmkar Kulkarni DBG_PSTORM_ID, 728ee824f4bSOmkar Kulkarni MAX_DBG_STORMS 729ee824f4bSOmkar Kulkarni }; 730ee824f4bSOmkar Kulkarni 731ee824f4bSOmkar Kulkarni /* Idle Check data */ 732ee824f4bSOmkar Kulkarni struct idle_chk_data { 733ee824f4bSOmkar Kulkarni u32 buf_size; 734ee824f4bSOmkar Kulkarni u8 buf_size_set; 735ee824f4bSOmkar Kulkarni u8 reserved1; 736ee824f4bSOmkar Kulkarni u16 reserved2; 737ee824f4bSOmkar Kulkarni }; 738ee824f4bSOmkar Kulkarni 739ee824f4bSOmkar Kulkarni struct pretend_params { 740ee824f4bSOmkar Kulkarni u8 split_type; 741ee824f4bSOmkar Kulkarni u8 reserved; 742ee824f4bSOmkar Kulkarni u16 split_id; 743ee824f4bSOmkar Kulkarni }; 744ee824f4bSOmkar Kulkarni 745ee824f4bSOmkar Kulkarni /* Debug Tools data (per HW function) 746ee824f4bSOmkar Kulkarni */ 747ee824f4bSOmkar Kulkarni struct dbg_tools_data { 748ee824f4bSOmkar Kulkarni struct dbg_grc_data grc; 749ee824f4bSOmkar Kulkarni struct dbg_bus_data bus; 750ee824f4bSOmkar Kulkarni struct idle_chk_data idle_chk; 751ee824f4bSOmkar Kulkarni u8 mode_enable[40]; 752ee824f4bSOmkar Kulkarni u8 block_in_reset[132]; 753ee824f4bSOmkar Kulkarni u8 chip_id; 754ee824f4bSOmkar Kulkarni u8 hw_type; 755ee824f4bSOmkar Kulkarni u8 num_ports; 756ee824f4bSOmkar Kulkarni u8 num_pfs_per_port; 757ee824f4bSOmkar Kulkarni u8 num_vfs; 758ee824f4bSOmkar Kulkarni u8 initialized; 759ee824f4bSOmkar Kulkarni u8 use_dmae; 760ee824f4bSOmkar Kulkarni u8 reserved; 761ee824f4bSOmkar Kulkarni struct pretend_params pretend; 762ee824f4bSOmkar Kulkarni u32 num_regs_read; 763ee824f4bSOmkar Kulkarni }; 764ee824f4bSOmkar Kulkarni 765ee824f4bSOmkar Kulkarni /* ILT Clients */ 766ee824f4bSOmkar Kulkarni enum ilt_clients { 767ee824f4bSOmkar Kulkarni ILT_CLI_CDUC, 768ee824f4bSOmkar Kulkarni ILT_CLI_CDUT, 769ee824f4bSOmkar Kulkarni ILT_CLI_QM, 770ee824f4bSOmkar Kulkarni ILT_CLI_TM, 771ee824f4bSOmkar Kulkarni ILT_CLI_SRC, 772ee824f4bSOmkar Kulkarni ILT_CLI_TSDM, 773ee824f4bSOmkar Kulkarni ILT_CLI_RGFS, 774ee824f4bSOmkar Kulkarni ILT_CLI_TGFS, 775ee824f4bSOmkar Kulkarni MAX_ILT_CLIENTS 776ee824f4bSOmkar Kulkarni }; 777ee824f4bSOmkar Kulkarni 778ee824f4bSOmkar Kulkarni /***************************** Public Functions *******************************/ 779ee824f4bSOmkar Kulkarni 780ee824f4bSOmkar Kulkarni /** 781ee824f4bSOmkar Kulkarni * qed_dbg_set_bin_ptr(): Sets a pointer to the binary data with debug 782ee824f4bSOmkar Kulkarni * arrays. 783ee824f4bSOmkar Kulkarni * 784ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 785ee824f4bSOmkar Kulkarni * @bin_ptr: A pointer to the binary data with debug arrays. 786ee824f4bSOmkar Kulkarni * 787ee824f4bSOmkar Kulkarni * Return: enum dbg status. 788ee824f4bSOmkar Kulkarni */ 789ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_set_bin_ptr(struct qed_hwfn *p_hwfn, 790ee824f4bSOmkar Kulkarni const u8 * const bin_ptr); 791ee824f4bSOmkar Kulkarni 792ee824f4bSOmkar Kulkarni /** 793ee824f4bSOmkar Kulkarni * qed_read_regs(): Reads registers into a buffer (using GRC). 794ee824f4bSOmkar Kulkarni * 795ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 796ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 797ee824f4bSOmkar Kulkarni * @buf: Destination buffer. 798ee824f4bSOmkar Kulkarni * @addr: Source GRC address in dwords. 799ee824f4bSOmkar Kulkarni * @len: Number of registers to read. 800ee824f4bSOmkar Kulkarni * 801ee824f4bSOmkar Kulkarni * Return: Void. 802ee824f4bSOmkar Kulkarni */ 803ee824f4bSOmkar Kulkarni void qed_read_regs(struct qed_hwfn *p_hwfn, 804ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, u32 *buf, u32 addr, u32 len); 805ee824f4bSOmkar Kulkarni 806ee824f4bSOmkar Kulkarni /** 807ee824f4bSOmkar Kulkarni * qed_read_fw_info(): Reads FW info from the chip. 808ee824f4bSOmkar Kulkarni * 809ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 810ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 811ee824f4bSOmkar Kulkarni * @fw_info: (Out) a pointer to write the FW info into. 812ee824f4bSOmkar Kulkarni * 813ee824f4bSOmkar Kulkarni * Return: True if the FW info was read successfully from one of the Storms, 814ee824f4bSOmkar Kulkarni * or false if all Storms are in reset. 815ee824f4bSOmkar Kulkarni * 816ee824f4bSOmkar Kulkarni * The FW info contains FW-related information, such as the FW version, 817ee824f4bSOmkar Kulkarni * FW image (main/L2B/kuku), FW timestamp, etc. 818ee824f4bSOmkar Kulkarni * The FW info is read from the internal RAM of the first Storm that is not in 819ee824f4bSOmkar Kulkarni * reset. 820ee824f4bSOmkar Kulkarni */ 821ee824f4bSOmkar Kulkarni bool qed_read_fw_info(struct qed_hwfn *p_hwfn, 822ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, struct fw_info *fw_info); 823ee824f4bSOmkar Kulkarni /** 824ee824f4bSOmkar Kulkarni * qed_dbg_grc_config(): Sets the value of a GRC parameter. 825ee824f4bSOmkar Kulkarni * 826ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 827ee824f4bSOmkar Kulkarni * @grc_param: GRC parameter. 828ee824f4bSOmkar Kulkarni * @val: Value to set. 829ee824f4bSOmkar Kulkarni * 830ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 831ee824f4bSOmkar Kulkarni * - The version wasn't set. 832ee824f4bSOmkar Kulkarni * - Grc_param is invalid. 833ee824f4bSOmkar Kulkarni * - Val is outside the allowed boundaries. 834ee824f4bSOmkar Kulkarni */ 835ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_grc_config(struct qed_hwfn *p_hwfn, 836ee824f4bSOmkar Kulkarni enum dbg_grc_params grc_param, u32 val); 837ee824f4bSOmkar Kulkarni 838ee824f4bSOmkar Kulkarni /** 839ee824f4bSOmkar Kulkarni * qed_dbg_grc_set_params_default(): Reverts all GRC parameters to their 840ee824f4bSOmkar Kulkarni * default value. 841ee824f4bSOmkar Kulkarni * 842ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 843ee824f4bSOmkar Kulkarni * 844ee824f4bSOmkar Kulkarni * Return: Void. 845ee824f4bSOmkar Kulkarni */ 846ee824f4bSOmkar Kulkarni void qed_dbg_grc_set_params_default(struct qed_hwfn *p_hwfn); 847ee824f4bSOmkar Kulkarni /** 848ee824f4bSOmkar Kulkarni * qed_dbg_grc_get_dump_buf_size(): Returns the required buffer size for 849ee824f4bSOmkar Kulkarni * GRC Dump. 850ee824f4bSOmkar Kulkarni * 851ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 852ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 853ee824f4bSOmkar Kulkarni * @buf_size: (OUT) required buffer size (in dwords) for the GRC Dump 854ee824f4bSOmkar Kulkarni * data. 855ee824f4bSOmkar Kulkarni * 856ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 857ee824f4bSOmkar Kulkarni * - The version wasn't set 858ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 859ee824f4bSOmkar Kulkarni */ 860ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_grc_get_dump_buf_size(struct qed_hwfn *p_hwfn, 861ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 862ee824f4bSOmkar Kulkarni u32 *buf_size); 863ee824f4bSOmkar Kulkarni 864ee824f4bSOmkar Kulkarni /** 865ee824f4bSOmkar Kulkarni * qed_dbg_grc_dump(): Dumps GRC data into the specified buffer. 866ee824f4bSOmkar Kulkarni * 867ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 868ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 869ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the collected GRC data into. 870ee824f4bSOmkar Kulkarni * @buf_size_in_dwords:Size of the specified buffer in dwords. 871ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 872ee824f4bSOmkar Kulkarni * 873ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 874ee824f4bSOmkar Kulkarni * - The version wasn't set. 875ee824f4bSOmkar Kulkarni * - The specified dump buffer is too small. 876ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 877ee824f4bSOmkar Kulkarni */ 878ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_grc_dump(struct qed_hwfn *p_hwfn, 879ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 880ee824f4bSOmkar Kulkarni u32 *dump_buf, 881ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 882ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 883ee824f4bSOmkar Kulkarni 884ee824f4bSOmkar Kulkarni /** 885ee824f4bSOmkar Kulkarni * qed_dbg_idle_chk_get_dump_buf_size(): Returns the required buffer size 886ee824f4bSOmkar Kulkarni * for idle check results. 887ee824f4bSOmkar Kulkarni * 888ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 889ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 890ee824f4bSOmkar Kulkarni * @buf_size: (OUT) required buffer size (in dwords) for the idle check 891ee824f4bSOmkar Kulkarni * data. 892ee824f4bSOmkar Kulkarni * 893ee824f4bSOmkar Kulkarni * return: Error if one of the following holds: 894ee824f4bSOmkar Kulkarni * - The version wasn't set. 895ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 896ee824f4bSOmkar Kulkarni */ 897ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_idle_chk_get_dump_buf_size(struct qed_hwfn *p_hwfn, 898ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 899ee824f4bSOmkar Kulkarni u32 *buf_size); 900ee824f4bSOmkar Kulkarni 901ee824f4bSOmkar Kulkarni /** 902ee824f4bSOmkar Kulkarni * qed_dbg_idle_chk_dump: Performs idle check and writes the results 903ee824f4bSOmkar Kulkarni * into the specified buffer. 904ee824f4bSOmkar Kulkarni * 905ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 906ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 907ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the idle check data into. 908ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 909ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 910ee824f4bSOmkar Kulkarni * 911ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 912ee824f4bSOmkar Kulkarni * - The version wasn't set. 913ee824f4bSOmkar Kulkarni * - The specified buffer is too small. 914ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 915ee824f4bSOmkar Kulkarni */ 916ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_idle_chk_dump(struct qed_hwfn *p_hwfn, 917ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 918ee824f4bSOmkar Kulkarni u32 *dump_buf, 919ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 920ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 921ee824f4bSOmkar Kulkarni 922ee824f4bSOmkar Kulkarni /** 923ee824f4bSOmkar Kulkarni * qed_dbg_mcp_trace_get_dump_buf_size(): Returns the required buffer size 924ee824f4bSOmkar Kulkarni * for mcp trace results. 925ee824f4bSOmkar Kulkarni * 926ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 927ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 928ee824f4bSOmkar Kulkarni * @buf_size: (OUT) Required buffer size (in dwords) for mcp trace data. 929ee824f4bSOmkar Kulkarni * 930ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 931ee824f4bSOmkar Kulkarni * - The version wasn't set. 932ee824f4bSOmkar Kulkarni * - The trace data in MCP scratchpad contain an invalid signature. 933ee824f4bSOmkar Kulkarni * - The bundle ID in NVRAM is invalid. 934ee824f4bSOmkar Kulkarni * - The trace meta data cannot be found (in NVRAM or image file). 935ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 936ee824f4bSOmkar Kulkarni */ 937ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_mcp_trace_get_dump_buf_size(struct qed_hwfn *p_hwfn, 938ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 939ee824f4bSOmkar Kulkarni u32 *buf_size); 940ee824f4bSOmkar Kulkarni 941ee824f4bSOmkar Kulkarni /** 942ee824f4bSOmkar Kulkarni * qed_dbg_mcp_trace_dump(): Performs mcp trace and writes the results 943ee824f4bSOmkar Kulkarni * into the specified buffer. 944ee824f4bSOmkar Kulkarni * 945ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 946ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 947ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the mcp trace data into. 948ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 949ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 950ee824f4bSOmkar Kulkarni * 951ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 952ee824f4bSOmkar Kulkarni * - The version wasn't set. 953ee824f4bSOmkar Kulkarni * - The specified buffer is too small. 954ee824f4bSOmkar Kulkarni * - The trace data in MCP scratchpad contain an invalid signature. 955ee824f4bSOmkar Kulkarni * - The bundle ID in NVRAM is invalid. 956ee824f4bSOmkar Kulkarni * - The trace meta data cannot be found (in NVRAM or image file). 957ee824f4bSOmkar Kulkarni * - The trace meta data cannot be read (from NVRAM or image file). 958ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 959ee824f4bSOmkar Kulkarni */ 960ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_mcp_trace_dump(struct qed_hwfn *p_hwfn, 961ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 962ee824f4bSOmkar Kulkarni u32 *dump_buf, 963ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 964ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 965ee824f4bSOmkar Kulkarni 966ee824f4bSOmkar Kulkarni /** 967ee824f4bSOmkar Kulkarni * qed_dbg_reg_fifo_get_dump_buf_size(): Returns the required buffer size 968ee824f4bSOmkar Kulkarni * for grc trace fifo results. 969ee824f4bSOmkar Kulkarni * 970ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 971ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 972ee824f4bSOmkar Kulkarni * @buf_size: (OUT) Required buffer size (in dwords) for reg fifo data. 973ee824f4bSOmkar Kulkarni * 974ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 975ee824f4bSOmkar Kulkarni * - The version wasn't set 976ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 977ee824f4bSOmkar Kulkarni */ 978ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_reg_fifo_get_dump_buf_size(struct qed_hwfn *p_hwfn, 979ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 980ee824f4bSOmkar Kulkarni u32 *buf_size); 981ee824f4bSOmkar Kulkarni 982ee824f4bSOmkar Kulkarni /** 983ee824f4bSOmkar Kulkarni * qed_dbg_reg_fifo_dump(): Reads the reg fifo and writes the results into 984ee824f4bSOmkar Kulkarni * the specified buffer. 985ee824f4bSOmkar Kulkarni * 986ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 987ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 988ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the reg fifo data into. 989ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 990ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 991ee824f4bSOmkar Kulkarni * 992ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 993ee824f4bSOmkar Kulkarni * - The version wasn't set. 994ee824f4bSOmkar Kulkarni * - The specified buffer is too small. 995ee824f4bSOmkar Kulkarni * - DMAE transaction failed. 996ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 997ee824f4bSOmkar Kulkarni */ 998ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_reg_fifo_dump(struct qed_hwfn *p_hwfn, 999ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1000ee824f4bSOmkar Kulkarni u32 *dump_buf, 1001ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 1002ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 1003ee824f4bSOmkar Kulkarni 1004ee824f4bSOmkar Kulkarni /** 1005ee824f4bSOmkar Kulkarni * qed_dbg_igu_fifo_get_dump_buf_size(): Returns the required buffer size 1006ee824f4bSOmkar Kulkarni * for the IGU fifo results. 1007ee824f4bSOmkar Kulkarni * 1008ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1009ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1010ee824f4bSOmkar Kulkarni * @buf_size: (OUT) Required buffer size (in dwords) for the IGU fifo 1011ee824f4bSOmkar Kulkarni * data. 1012ee824f4bSOmkar Kulkarni * 1013ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1014ee824f4bSOmkar Kulkarni * - The version wasn't set. 1015ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1016ee824f4bSOmkar Kulkarni */ 1017ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_igu_fifo_get_dump_buf_size(struct qed_hwfn *p_hwfn, 1018ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1019ee824f4bSOmkar Kulkarni u32 *buf_size); 1020ee824f4bSOmkar Kulkarni 1021ee824f4bSOmkar Kulkarni /** 1022ee824f4bSOmkar Kulkarni * qed_dbg_igu_fifo_dump(): Reads the IGU fifo and writes the results into 1023ee824f4bSOmkar Kulkarni * the specified buffer. 1024ee824f4bSOmkar Kulkarni * 1025ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1026ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1027ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the IGU fifo data into. 1028ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 1029ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 1030ee824f4bSOmkar Kulkarni * 1031ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1032ee824f4bSOmkar Kulkarni * - The version wasn't set 1033ee824f4bSOmkar Kulkarni * - The specified buffer is too small 1034ee824f4bSOmkar Kulkarni * - DMAE transaction failed 1035ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1036ee824f4bSOmkar Kulkarni */ 1037ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_igu_fifo_dump(struct qed_hwfn *p_hwfn, 1038ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1039ee824f4bSOmkar Kulkarni u32 *dump_buf, 1040ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 1041ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 1042ee824f4bSOmkar Kulkarni 1043ee824f4bSOmkar Kulkarni /** 1044ee824f4bSOmkar Kulkarni * qed_dbg_protection_override_get_dump_buf_size(): Returns the required 1045ee824f4bSOmkar Kulkarni * buffer size for protection override window results. 1046ee824f4bSOmkar Kulkarni * 1047ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1048ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1049ee824f4bSOmkar Kulkarni * @buf_size: (OUT) Required buffer size (in dwords) for protection 1050ee824f4bSOmkar Kulkarni * override data. 1051ee824f4bSOmkar Kulkarni * 1052ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1053ee824f4bSOmkar Kulkarni * - The version wasn't set 1054ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1055ee824f4bSOmkar Kulkarni */ 1056ee824f4bSOmkar Kulkarni enum dbg_status 1057ee824f4bSOmkar Kulkarni qed_dbg_protection_override_get_dump_buf_size(struct qed_hwfn *p_hwfn, 1058ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1059ee824f4bSOmkar Kulkarni u32 *buf_size); 1060ee824f4bSOmkar Kulkarni /** 1061ee824f4bSOmkar Kulkarni * qed_dbg_protection_override_dump(): Reads protection override window 1062ee824f4bSOmkar Kulkarni * entries and writes the results into the specified buffer. 1063ee824f4bSOmkar Kulkarni * 1064ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1065ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1066ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the protection override data into. 1067ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 1068ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 1069ee824f4bSOmkar Kulkarni * 1070ee824f4bSOmkar Kulkarni * @return: Error if one of the following holds: 1071ee824f4bSOmkar Kulkarni * - The version wasn't set. 1072ee824f4bSOmkar Kulkarni * - The specified buffer is too small. 1073ee824f4bSOmkar Kulkarni * - DMAE transaction failed. 1074ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1075ee824f4bSOmkar Kulkarni */ 1076ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_protection_override_dump(struct qed_hwfn *p_hwfn, 1077ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1078ee824f4bSOmkar Kulkarni u32 *dump_buf, 1079ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 1080ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 1081ee824f4bSOmkar Kulkarni /** 1082ee824f4bSOmkar Kulkarni * qed_dbg_fw_asserts_get_dump_buf_size(): Returns the required buffer 1083ee824f4bSOmkar Kulkarni * size for FW Asserts results. 1084ee824f4bSOmkar Kulkarni * 1085ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1086ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1087ee824f4bSOmkar Kulkarni * @buf_size: (OUT) Required buffer size (in dwords) for FW Asserts data. 1088ee824f4bSOmkar Kulkarni * 1089ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1090ee824f4bSOmkar Kulkarni * - The version wasn't set. 1091ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1092ee824f4bSOmkar Kulkarni */ 1093ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_fw_asserts_get_dump_buf_size(struct qed_hwfn *p_hwfn, 1094ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1095ee824f4bSOmkar Kulkarni u32 *buf_size); 1096ee824f4bSOmkar Kulkarni /** 1097ee824f4bSOmkar Kulkarni * qed_dbg_fw_asserts_dump(): Reads the FW Asserts and writes the results 1098ee824f4bSOmkar Kulkarni * into the specified buffer. 1099ee824f4bSOmkar Kulkarni * 1100ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1101ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1102ee824f4bSOmkar Kulkarni * @dump_buf: Pointer to write the FW Asserts data into. 1103ee824f4bSOmkar Kulkarni * @buf_size_in_dwords: Size of the specified buffer in dwords. 1104ee824f4bSOmkar Kulkarni * @num_dumped_dwords: (OUT) number of dumped dwords. 1105ee824f4bSOmkar Kulkarni * 1106ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1107ee824f4bSOmkar Kulkarni * - The version wasn't set. 1108ee824f4bSOmkar Kulkarni * - The specified buffer is too small. 1109ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1110ee824f4bSOmkar Kulkarni */ 1111ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_fw_asserts_dump(struct qed_hwfn *p_hwfn, 1112ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1113ee824f4bSOmkar Kulkarni u32 *dump_buf, 1114ee824f4bSOmkar Kulkarni u32 buf_size_in_dwords, 1115ee824f4bSOmkar Kulkarni u32 *num_dumped_dwords); 1116ee824f4bSOmkar Kulkarni 1117ee824f4bSOmkar Kulkarni /** 1118ee824f4bSOmkar Kulkarni * qed_dbg_read_attn(): Reads the attention registers of the specified 1119ee824f4bSOmkar Kulkarni * block and type, and writes the results into the specified buffer. 1120ee824f4bSOmkar Kulkarni * 1121ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1122ee824f4bSOmkar Kulkarni * @p_ptt: Ptt window used for writing the registers. 1123ee824f4bSOmkar Kulkarni * @block: Block ID. 1124ee824f4bSOmkar Kulkarni * @attn_type: Attention type. 1125ee824f4bSOmkar Kulkarni * @clear_status: Indicates if the attention status should be cleared. 1126ee824f4bSOmkar Kulkarni * @results: (OUT) Pointer to write the read results into. 1127ee824f4bSOmkar Kulkarni * 1128ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1129ee824f4bSOmkar Kulkarni * - The version wasn't set 1130ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1131ee824f4bSOmkar Kulkarni */ 1132ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_read_attn(struct qed_hwfn *p_hwfn, 1133ee824f4bSOmkar Kulkarni struct qed_ptt *p_ptt, 1134ee824f4bSOmkar Kulkarni enum block_id block, 1135ee824f4bSOmkar Kulkarni enum dbg_attn_type attn_type, 1136ee824f4bSOmkar Kulkarni bool clear_status, 1137ee824f4bSOmkar Kulkarni struct dbg_attn_block_result *results); 1138ee824f4bSOmkar Kulkarni 1139ee824f4bSOmkar Kulkarni /** 1140ee824f4bSOmkar Kulkarni * qed_dbg_print_attn(): Prints attention registers values in the 1141ee824f4bSOmkar Kulkarni * specified results struct. 1142ee824f4bSOmkar Kulkarni * 1143ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1144ee824f4bSOmkar Kulkarni * @results: Pointer to the attention read results 1145ee824f4bSOmkar Kulkarni * 1146ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1147ee824f4bSOmkar Kulkarni * - The version wasn't set 1148ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1149ee824f4bSOmkar Kulkarni */ 1150ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_print_attn(struct qed_hwfn *p_hwfn, 1151ee824f4bSOmkar Kulkarni struct dbg_attn_block_result *results); 1152ee824f4bSOmkar Kulkarni 1153ee824f4bSOmkar Kulkarni /******************************* Data Types **********************************/ 1154ee824f4bSOmkar Kulkarni 1155ee824f4bSOmkar Kulkarni struct mcp_trace_format { 1156ee824f4bSOmkar Kulkarni u32 data; 1157ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_MODULE_MASK 0x0000ffff 1158ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_MODULE_OFFSET 0 1159ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_LEVEL_MASK 0x00030000 1160ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_LEVEL_OFFSET 16 1161ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P1_SIZE_MASK 0x000c0000 1162ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P1_SIZE_OFFSET 18 1163ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P2_SIZE_MASK 0x00300000 1164ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P2_SIZE_OFFSET 20 1165ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P3_SIZE_MASK 0x00c00000 1166ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_P3_SIZE_OFFSET 22 1167ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_LEN_MASK 0xff000000 1168ee824f4bSOmkar Kulkarni #define MCP_TRACE_FORMAT_LEN_OFFSET 24 1169ee824f4bSOmkar Kulkarni 1170ee824f4bSOmkar Kulkarni char *format_str; 1171ee824f4bSOmkar Kulkarni }; 1172ee824f4bSOmkar Kulkarni 1173ee824f4bSOmkar Kulkarni /* MCP Trace Meta data structure */ 1174ee824f4bSOmkar Kulkarni struct mcp_trace_meta { 1175ee824f4bSOmkar Kulkarni u32 modules_num; 1176ee824f4bSOmkar Kulkarni char **modules; 1177ee824f4bSOmkar Kulkarni u32 formats_num; 1178ee824f4bSOmkar Kulkarni struct mcp_trace_format *formats; 1179ee824f4bSOmkar Kulkarni bool is_allocated; 1180ee824f4bSOmkar Kulkarni }; 1181ee824f4bSOmkar Kulkarni 1182ee824f4bSOmkar Kulkarni /* Debug Tools user data */ 1183ee824f4bSOmkar Kulkarni struct dbg_tools_user_data { 1184ee824f4bSOmkar Kulkarni struct mcp_trace_meta mcp_trace_meta; 1185ee824f4bSOmkar Kulkarni const u32 *mcp_trace_user_meta_buf; 1186ee824f4bSOmkar Kulkarni }; 1187ee824f4bSOmkar Kulkarni 1188ee824f4bSOmkar Kulkarni /******************************** Constants **********************************/ 1189ee824f4bSOmkar Kulkarni 1190ee824f4bSOmkar Kulkarni #define MAX_NAME_LEN 16 1191ee824f4bSOmkar Kulkarni 1192ee824f4bSOmkar Kulkarni /***************************** Public Functions *******************************/ 1193ee824f4bSOmkar Kulkarni 1194ee824f4bSOmkar Kulkarni /** 1195ee824f4bSOmkar Kulkarni * qed_dbg_user_set_bin_ptr(): Sets a pointer to the binary data with 1196ee824f4bSOmkar Kulkarni * debug arrays. 1197ee824f4bSOmkar Kulkarni * 1198ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1199ee824f4bSOmkar Kulkarni * @bin_ptr: a pointer to the binary data with debug arrays. 1200ee824f4bSOmkar Kulkarni * 1201ee824f4bSOmkar Kulkarni * Return: dbg_status. 1202ee824f4bSOmkar Kulkarni */ 1203ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_user_set_bin_ptr(struct qed_hwfn *p_hwfn, 1204ee824f4bSOmkar Kulkarni const u8 * const bin_ptr); 1205ee824f4bSOmkar Kulkarni 1206ee824f4bSOmkar Kulkarni /** 1207ee824f4bSOmkar Kulkarni * qed_dbg_alloc_user_data(): Allocates user debug data. 1208ee824f4bSOmkar Kulkarni * 1209ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1210ee824f4bSOmkar Kulkarni * @user_data_ptr: (OUT) a pointer to the allocated memory. 1211ee824f4bSOmkar Kulkarni * 1212ee824f4bSOmkar Kulkarni * Return: dbg_status. 1213ee824f4bSOmkar Kulkarni */ 1214ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_alloc_user_data(struct qed_hwfn *p_hwfn, 1215ee824f4bSOmkar Kulkarni void **user_data_ptr); 1216ee824f4bSOmkar Kulkarni 1217ee824f4bSOmkar Kulkarni /** 1218ee824f4bSOmkar Kulkarni * qed_dbg_get_status_str(): Returns a string for the specified status. 1219ee824f4bSOmkar Kulkarni * 1220ee824f4bSOmkar Kulkarni * @status: A debug status code. 1221ee824f4bSOmkar Kulkarni * 1222ee824f4bSOmkar Kulkarni * Return: A string for the specified status. 1223ee824f4bSOmkar Kulkarni */ 1224ee824f4bSOmkar Kulkarni const char *qed_dbg_get_status_str(enum dbg_status status); 1225ee824f4bSOmkar Kulkarni 1226ee824f4bSOmkar Kulkarni /** 1227ee824f4bSOmkar Kulkarni * qed_get_idle_chk_results_buf_size(): Returns the required buffer size 1228ee824f4bSOmkar Kulkarni * for idle check results (in bytes). 1229ee824f4bSOmkar Kulkarni * 1230ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1231ee824f4bSOmkar Kulkarni * @dump_buf: idle check dump buffer. 1232ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1233ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1234ee824f4bSOmkar Kulkarni * results. 1235ee824f4bSOmkar Kulkarni * 1236ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1237ee824f4bSOmkar Kulkarni */ 1238ee824f4bSOmkar Kulkarni enum dbg_status qed_get_idle_chk_results_buf_size(struct qed_hwfn *p_hwfn, 1239ee824f4bSOmkar Kulkarni u32 *dump_buf, 1240ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1241ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1242ee824f4bSOmkar Kulkarni /** 1243ee824f4bSOmkar Kulkarni * qed_print_idle_chk_results(): Prints idle check results 1244ee824f4bSOmkar Kulkarni * 1245ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1246ee824f4bSOmkar Kulkarni * @dump_buf: idle check dump buffer. 1247ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1248ee824f4bSOmkar Kulkarni * @results_buf: buffer for printing the idle check results. 1249ee824f4bSOmkar Kulkarni * @num_errors: (OUT) number of errors found in idle check. 1250ee824f4bSOmkar Kulkarni * @num_warnings: (OUT) number of warnings found in idle check. 1251ee824f4bSOmkar Kulkarni * 1252ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1253ee824f4bSOmkar Kulkarni */ 1254ee824f4bSOmkar Kulkarni enum dbg_status qed_print_idle_chk_results(struct qed_hwfn *p_hwfn, 1255ee824f4bSOmkar Kulkarni u32 *dump_buf, 1256ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1257ee824f4bSOmkar Kulkarni char *results_buf, 1258ee824f4bSOmkar Kulkarni u32 *num_errors, 1259ee824f4bSOmkar Kulkarni u32 *num_warnings); 1260ee824f4bSOmkar Kulkarni 1261ee824f4bSOmkar Kulkarni /** 1262ee824f4bSOmkar Kulkarni * qed_dbg_mcp_trace_set_meta_data(): Sets the MCP Trace meta data. 1263ee824f4bSOmkar Kulkarni * 1264ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1265ee824f4bSOmkar Kulkarni * @meta_buf: Meta buffer. 1266ee824f4bSOmkar Kulkarni * 1267ee824f4bSOmkar Kulkarni * Return: Void. 1268ee824f4bSOmkar Kulkarni * 1269ee824f4bSOmkar Kulkarni * Needed in case the MCP Trace dump doesn't contain the meta data (e.g. due to 1270ee824f4bSOmkar Kulkarni * no NVRAM access). 1271ee824f4bSOmkar Kulkarni */ 1272ee824f4bSOmkar Kulkarni void qed_dbg_mcp_trace_set_meta_data(struct qed_hwfn *p_hwfn, 1273ee824f4bSOmkar Kulkarni const u32 *meta_buf); 1274ee824f4bSOmkar Kulkarni 1275ee824f4bSOmkar Kulkarni /** 1276ee824f4bSOmkar Kulkarni * qed_get_mcp_trace_results_buf_size(): Returns the required buffer size 1277ee824f4bSOmkar Kulkarni * for MCP Trace results (in bytes). 1278ee824f4bSOmkar Kulkarni * 1279ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1280ee824f4bSOmkar Kulkarni * @dump_buf: MCP Trace dump buffer. 1281ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1282ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1283ee824f4bSOmkar Kulkarni * results. 1284ee824f4bSOmkar Kulkarni * 1285*60f243adSJulia Lawall * Return: Error if the parsing fails, ok otherwise. 1286ee824f4bSOmkar Kulkarni */ 1287ee824f4bSOmkar Kulkarni enum dbg_status qed_get_mcp_trace_results_buf_size(struct qed_hwfn *p_hwfn, 1288ee824f4bSOmkar Kulkarni u32 *dump_buf, 1289ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1290ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1291ee824f4bSOmkar Kulkarni 1292ee824f4bSOmkar Kulkarni /** 1293ee824f4bSOmkar Kulkarni * qed_print_mcp_trace_results(): Prints MCP Trace results 1294ee824f4bSOmkar Kulkarni * 1295ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1296ee824f4bSOmkar Kulkarni * @dump_buf: MCP trace dump buffer, starting from the header. 1297ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Member of dwords that were dumped. 1298ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the mcp trace results. 1299ee824f4bSOmkar Kulkarni * 1300ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1301ee824f4bSOmkar Kulkarni */ 1302ee824f4bSOmkar Kulkarni enum dbg_status qed_print_mcp_trace_results(struct qed_hwfn *p_hwfn, 1303ee824f4bSOmkar Kulkarni u32 *dump_buf, 1304ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1305ee824f4bSOmkar Kulkarni char *results_buf); 1306ee824f4bSOmkar Kulkarni 1307ee824f4bSOmkar Kulkarni /** 1308ee824f4bSOmkar Kulkarni * qed_print_mcp_trace_results_cont(): Prints MCP Trace results, and 1309ee824f4bSOmkar Kulkarni * keeps the MCP trace meta data allocated, to support continuous MCP Trace 1310ee824f4bSOmkar Kulkarni * parsing. After the continuous parsing ends, mcp_trace_free_meta_data should 1311ee824f4bSOmkar Kulkarni * be called to free the meta data. 1312ee824f4bSOmkar Kulkarni * 1313ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1314ee824f4bSOmkar Kulkarni * @dump_buf: MVP trace dump buffer, starting from the header. 1315ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the mcp trace results. 1316ee824f4bSOmkar Kulkarni * 1317ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1318ee824f4bSOmkar Kulkarni */ 1319ee824f4bSOmkar Kulkarni enum dbg_status qed_print_mcp_trace_results_cont(struct qed_hwfn *p_hwfn, 1320ee824f4bSOmkar Kulkarni u32 *dump_buf, 1321ee824f4bSOmkar Kulkarni char *results_buf); 1322ee824f4bSOmkar Kulkarni 1323ee824f4bSOmkar Kulkarni /** 1324ee824f4bSOmkar Kulkarni * qed_print_mcp_trace_line(): Prints MCP Trace results for a single line 1325ee824f4bSOmkar Kulkarni * 1326ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1327ee824f4bSOmkar Kulkarni * @dump_buf: MCP trace dump buffer, starting from the header. 1328ee824f4bSOmkar Kulkarni * @num_dumped_bytes: Number of bytes that were dumped. 1329ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the mcp trace results. 1330ee824f4bSOmkar Kulkarni * 1331ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1332ee824f4bSOmkar Kulkarni */ 1333ee824f4bSOmkar Kulkarni enum dbg_status qed_print_mcp_trace_line(struct qed_hwfn *p_hwfn, 1334ee824f4bSOmkar Kulkarni u8 *dump_buf, 1335ee824f4bSOmkar Kulkarni u32 num_dumped_bytes, 1336ee824f4bSOmkar Kulkarni char *results_buf); 1337ee824f4bSOmkar Kulkarni 1338ee824f4bSOmkar Kulkarni /** 1339ee824f4bSOmkar Kulkarni * qed_mcp_trace_free_meta_data(): Frees the MCP Trace meta data. 1340ee824f4bSOmkar Kulkarni * Should be called after continuous MCP Trace parsing. 1341ee824f4bSOmkar Kulkarni * 1342ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1343ee824f4bSOmkar Kulkarni * 1344ee824f4bSOmkar Kulkarni * Return: Void. 1345ee824f4bSOmkar Kulkarni */ 1346ee824f4bSOmkar Kulkarni void qed_mcp_trace_free_meta_data(struct qed_hwfn *p_hwfn); 1347ee824f4bSOmkar Kulkarni 1348ee824f4bSOmkar Kulkarni /** 1349ee824f4bSOmkar Kulkarni * qed_get_reg_fifo_results_buf_size(): Returns the required buffer size 1350ee824f4bSOmkar Kulkarni * for reg_fifo results (in bytes). 1351ee824f4bSOmkar Kulkarni * 1352ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1353ee824f4bSOmkar Kulkarni * @dump_buf: Reg fifo dump buffer. 1354ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Number of dwords that were dumped. 1355ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1356ee824f4bSOmkar Kulkarni * results. 1357ee824f4bSOmkar Kulkarni * 1358ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1359ee824f4bSOmkar Kulkarni */ 1360ee824f4bSOmkar Kulkarni enum dbg_status qed_get_reg_fifo_results_buf_size(struct qed_hwfn *p_hwfn, 1361ee824f4bSOmkar Kulkarni u32 *dump_buf, 1362ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1363ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1364ee824f4bSOmkar Kulkarni 1365ee824f4bSOmkar Kulkarni /** 1366ee824f4bSOmkar Kulkarni * qed_print_reg_fifo_results(): Prints reg fifo results. 1367ee824f4bSOmkar Kulkarni * 1368ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1369ee824f4bSOmkar Kulkarni * @dump_buf: Reg fifo dump buffer, starting from the header. 1370ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Number of dwords that were dumped. 1371ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the reg fifo results. 1372ee824f4bSOmkar Kulkarni * 1373ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1374ee824f4bSOmkar Kulkarni */ 1375ee824f4bSOmkar Kulkarni enum dbg_status qed_print_reg_fifo_results(struct qed_hwfn *p_hwfn, 1376ee824f4bSOmkar Kulkarni u32 *dump_buf, 1377ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1378ee824f4bSOmkar Kulkarni char *results_buf); 1379ee824f4bSOmkar Kulkarni 1380ee824f4bSOmkar Kulkarni /** 1381ee824f4bSOmkar Kulkarni * qed_get_igu_fifo_results_buf_size(): Returns the required buffer size 1382ee824f4bSOmkar Kulkarni * for igu_fifo results (in bytes). 1383ee824f4bSOmkar Kulkarni * 1384ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1385ee824f4bSOmkar Kulkarni * @dump_buf: IGU fifo dump buffer. 1386ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1387ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1388ee824f4bSOmkar Kulkarni * results. 1389ee824f4bSOmkar Kulkarni * 1390ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1391ee824f4bSOmkar Kulkarni */ 1392ee824f4bSOmkar Kulkarni enum dbg_status qed_get_igu_fifo_results_buf_size(struct qed_hwfn *p_hwfn, 1393ee824f4bSOmkar Kulkarni u32 *dump_buf, 1394ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1395ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1396ee824f4bSOmkar Kulkarni 1397ee824f4bSOmkar Kulkarni /** 1398ee824f4bSOmkar Kulkarni * qed_print_igu_fifo_results(): Prints IGU fifo results 1399ee824f4bSOmkar Kulkarni * 1400ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1401ee824f4bSOmkar Kulkarni * @dump_buf: IGU fifo dump buffer, starting from the header. 1402ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Number of dwords that were dumped. 1403ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the IGU fifo results. 1404ee824f4bSOmkar Kulkarni * 1405ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1406ee824f4bSOmkar Kulkarni */ 1407ee824f4bSOmkar Kulkarni enum dbg_status qed_print_igu_fifo_results(struct qed_hwfn *p_hwfn, 1408ee824f4bSOmkar Kulkarni u32 *dump_buf, 1409ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1410ee824f4bSOmkar Kulkarni char *results_buf); 1411ee824f4bSOmkar Kulkarni 1412ee824f4bSOmkar Kulkarni /** 1413ee824f4bSOmkar Kulkarni * qed_get_protection_override_results_buf_size(): Returns the required 1414ee824f4bSOmkar Kulkarni * buffer size for protection override results (in bytes). 1415ee824f4bSOmkar Kulkarni * 1416ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1417ee824f4bSOmkar Kulkarni * @dump_buf: Protection override dump buffer. 1418ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Number of dwords that were dumped. 1419ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1420ee824f4bSOmkar Kulkarni * results. 1421ee824f4bSOmkar Kulkarni * 1422ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1423ee824f4bSOmkar Kulkarni */ 1424ee824f4bSOmkar Kulkarni enum dbg_status 1425ee824f4bSOmkar Kulkarni qed_get_protection_override_results_buf_size(struct qed_hwfn *p_hwfn, 1426ee824f4bSOmkar Kulkarni u32 *dump_buf, 1427ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1428ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1429ee824f4bSOmkar Kulkarni 1430ee824f4bSOmkar Kulkarni /** 1431ee824f4bSOmkar Kulkarni * qed_print_protection_override_results(): Prints protection override 1432ee824f4bSOmkar Kulkarni * results. 1433ee824f4bSOmkar Kulkarni * 1434ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1435ee824f4bSOmkar Kulkarni * @dump_buf: Protection override dump buffer, starting from the header. 1436ee824f4bSOmkar Kulkarni * @num_dumped_dwords: Number of dwords that were dumped. 1437ee824f4bSOmkar Kulkarni * @results_buf: Buffer for printing the reg fifo results. 1438ee824f4bSOmkar Kulkarni * 1439ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1440ee824f4bSOmkar Kulkarni */ 1441ee824f4bSOmkar Kulkarni enum dbg_status qed_print_protection_override_results(struct qed_hwfn *p_hwfn, 1442ee824f4bSOmkar Kulkarni u32 *dump_buf, 1443ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1444ee824f4bSOmkar Kulkarni char *results_buf); 1445ee824f4bSOmkar Kulkarni 1446ee824f4bSOmkar Kulkarni /** 1447ee824f4bSOmkar Kulkarni * qed_get_fw_asserts_results_buf_size(): Returns the required buffer size 1448ee824f4bSOmkar Kulkarni * for FW Asserts results (in bytes). 1449ee824f4bSOmkar Kulkarni * 1450ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1451ee824f4bSOmkar Kulkarni * @dump_buf: FW Asserts dump buffer. 1452ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1453ee824f4bSOmkar Kulkarni * @results_buf_size: (OUT) required buffer size (in bytes) for the parsed 1454ee824f4bSOmkar Kulkarni * results. 1455ee824f4bSOmkar Kulkarni * 1456ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1457ee824f4bSOmkar Kulkarni */ 1458ee824f4bSOmkar Kulkarni enum dbg_status qed_get_fw_asserts_results_buf_size(struct qed_hwfn *p_hwfn, 1459ee824f4bSOmkar Kulkarni u32 *dump_buf, 1460ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1461ee824f4bSOmkar Kulkarni u32 *results_buf_size); 1462ee824f4bSOmkar Kulkarni 1463ee824f4bSOmkar Kulkarni /** 1464ee824f4bSOmkar Kulkarni * qed_print_fw_asserts_results(): Prints FW Asserts results. 1465ee824f4bSOmkar Kulkarni * 1466ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1467ee824f4bSOmkar Kulkarni * @dump_buf: FW Asserts dump buffer, starting from the header. 1468ee824f4bSOmkar Kulkarni * @num_dumped_dwords: number of dwords that were dumped. 1469ee824f4bSOmkar Kulkarni * @results_buf: buffer for printing the FW Asserts results. 1470ee824f4bSOmkar Kulkarni * 1471ee824f4bSOmkar Kulkarni * Return: Error if the parsing fails, ok otherwise. 1472ee824f4bSOmkar Kulkarni */ 1473ee824f4bSOmkar Kulkarni enum dbg_status qed_print_fw_asserts_results(struct qed_hwfn *p_hwfn, 1474ee824f4bSOmkar Kulkarni u32 *dump_buf, 1475ee824f4bSOmkar Kulkarni u32 num_dumped_dwords, 1476ee824f4bSOmkar Kulkarni char *results_buf); 1477ee824f4bSOmkar Kulkarni 1478ee824f4bSOmkar Kulkarni /** 1479ee824f4bSOmkar Kulkarni * qed_dbg_parse_attn(): Parses and prints attention registers values in 1480ee824f4bSOmkar Kulkarni * the specified results struct. 1481ee824f4bSOmkar Kulkarni * 1482ee824f4bSOmkar Kulkarni * @p_hwfn: HW device data. 1483ee824f4bSOmkar Kulkarni * @results: Pointer to the attention read results 1484ee824f4bSOmkar Kulkarni * 1485ee824f4bSOmkar Kulkarni * Return: Error if one of the following holds: 1486ee824f4bSOmkar Kulkarni * - The version wasn't set. 1487ee824f4bSOmkar Kulkarni * Otherwise, returns ok. 1488ee824f4bSOmkar Kulkarni */ 1489ee824f4bSOmkar Kulkarni enum dbg_status qed_dbg_parse_attn(struct qed_hwfn *p_hwfn, 1490ee824f4bSOmkar Kulkarni struct dbg_attn_block_result *results); 1491ee824f4bSOmkar Kulkarni #endif 1492