1/* 2 * Copyright (c) 2017-2018 Cavium, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD: stable/11/sys/dev/qlnx/qlnxe/ecore_hsi_debug_tools.h 337517 2018-08-09 01:17:35Z davidcs $ 28 * 29 */ 30 31#ifndef __ECORE_HSI_DEBUG_TOOLS__ 32#define __ECORE_HSI_DEBUG_TOOLS__ 33/****************************************/ 34/* Debug Tools HSI constants and macros */ 35/****************************************/ 36 37 38enum block_addr 39{ 40 GRCBASE_GRC = 0x50000, 41 GRCBASE_MISCS = 0x9000, 42 GRCBASE_MISC = 0x8000, 43 GRCBASE_DBU = 0xa000, 44 GRCBASE_PGLUE_B = 0x2a8000, 45 GRCBASE_CNIG = 0x218000, 46 GRCBASE_CPMU = 0x30000, 47 GRCBASE_NCSI = 0x40000, 48 GRCBASE_OPTE = 0x53000, 49 GRCBASE_BMB = 0x540000, 50 GRCBASE_PCIE = 0x54000, 51 GRCBASE_MCP = 0xe00000, 52 GRCBASE_MCP2 = 0x52000, 53 GRCBASE_PSWHST = 0x2a0000, 54 GRCBASE_PSWHST2 = 0x29e000, 55 GRCBASE_PSWRD = 0x29c000, 56 GRCBASE_PSWRD2 = 0x29d000, 57 GRCBASE_PSWWR = 0x29a000, 58 GRCBASE_PSWWR2 = 0x29b000, 59 GRCBASE_PSWRQ = 0x280000, 60 GRCBASE_PSWRQ2 = 0x240000, 61 GRCBASE_PGLCS = 0x0, 62 GRCBASE_DMAE = 0xc000, 63 GRCBASE_PTU = 0x560000, 64 GRCBASE_TCM = 0x1180000, 65 GRCBASE_MCM = 0x1200000, 66 GRCBASE_UCM = 0x1280000, 67 GRCBASE_XCM = 0x1000000, 68 GRCBASE_YCM = 0x1080000, 69 GRCBASE_PCM = 0x1100000, 70 GRCBASE_QM = 0x2f0000, 71 GRCBASE_TM = 0x2c0000, 72 GRCBASE_DORQ = 0x100000, 73 GRCBASE_BRB = 0x340000, 74 GRCBASE_SRC = 0x238000, 75 GRCBASE_PRS = 0x1f0000, 76 GRCBASE_TSDM = 0xfb0000, 77 GRCBASE_MSDM = 0xfc0000, 78 GRCBASE_USDM = 0xfd0000, 79 GRCBASE_XSDM = 0xf80000, 80 GRCBASE_YSDM = 0xf90000, 81 GRCBASE_PSDM = 0xfa0000, 82 GRCBASE_TSEM = 0x1700000, 83 GRCBASE_MSEM = 0x1800000, 84 GRCBASE_USEM = 0x1900000, 85 GRCBASE_XSEM = 0x1400000, 86 GRCBASE_YSEM = 0x1500000, 87 GRCBASE_PSEM = 0x1600000, 88 GRCBASE_RSS = 0x238800, 89 GRCBASE_TMLD = 0x4d0000, 90 GRCBASE_MULD = 0x4e0000, 91 GRCBASE_YULD = 0x4c8000, 92 GRCBASE_XYLD = 0x4c0000, 93 GRCBASE_PTLD = 0x5a0000, 94 GRCBASE_YPLD = 0x5c0000, 95 GRCBASE_PRM = 0x230000, 96 GRCBASE_PBF_PB1 = 0xda0000, 97 GRCBASE_PBF_PB2 = 0xda4000, 98 GRCBASE_RPB = 0x23c000, 99 GRCBASE_BTB = 0xdb0000, 100 GRCBASE_PBF = 0xd80000, 101 GRCBASE_RDIF = 0x300000, 102 GRCBASE_TDIF = 0x310000, 103 GRCBASE_CDU = 0x580000, 104 GRCBASE_CCFC = 0x2e0000, 105 GRCBASE_TCFC = 0x2d0000, 106 GRCBASE_IGU = 0x180000, 107 GRCBASE_CAU = 0x1c0000, 108 GRCBASE_RGFS = 0xf00000, 109 GRCBASE_RGSRC = 0x320000, 110 GRCBASE_TGFS = 0xd00000, 111 GRCBASE_TGSRC = 0x322000, 112 GRCBASE_UMAC = 0x51000, 113 GRCBASE_XMAC = 0x210000, 114 GRCBASE_DBG = 0x10000, 115 GRCBASE_NIG = 0x500000, 116 GRCBASE_WOL = 0x600000, 117 GRCBASE_BMBN = 0x610000, 118 GRCBASE_IPC = 0x20000, 119 GRCBASE_NWM = 0x800000, 120 GRCBASE_NWS = 0x700000, 121 GRCBASE_MS = 0x6a0000, 122 GRCBASE_PHY_PCIE = 0x620000, 123 GRCBASE_LED = 0x6b8000, 124 GRCBASE_AVS_WRAP = 0x6b0000, 125 GRCBASE_PXPREQBUS = 0x56000, 126 GRCBASE_MISC_AEU = 0x8000, 127 GRCBASE_BAR0_MAP = 0x1c00000, 128 MAX_BLOCK_ADDR 129}; 130 131 132enum block_id 133{ 134 BLOCK_GRC, 135 BLOCK_MISCS, 136 BLOCK_MISC, 137 BLOCK_DBU, 138 BLOCK_PGLUE_B, 139 BLOCK_CNIG, 140 BLOCK_CPMU, 141 BLOCK_NCSI, 142 BLOCK_OPTE, 143 BLOCK_BMB, 144 BLOCK_PCIE, 145 BLOCK_MCP, 146 BLOCK_MCP2, 147 BLOCK_PSWHST, 148 BLOCK_PSWHST2, 149 BLOCK_PSWRD, 150 BLOCK_PSWRD2, 151 BLOCK_PSWWR, 152 BLOCK_PSWWR2, 153 BLOCK_PSWRQ, 154 BLOCK_PSWRQ2, 155 BLOCK_PGLCS, 156 BLOCK_DMAE, 157 BLOCK_PTU, 158 BLOCK_TCM, 159 BLOCK_MCM, 160 BLOCK_UCM, 161 BLOCK_XCM, 162 BLOCK_YCM, 163 BLOCK_PCM, 164 BLOCK_QM, 165 BLOCK_TM, 166 BLOCK_DORQ, 167 BLOCK_BRB, 168 BLOCK_SRC, 169 BLOCK_PRS, 170 BLOCK_TSDM, 171 BLOCK_MSDM, 172 BLOCK_USDM, 173 BLOCK_XSDM, 174 BLOCK_YSDM, 175 BLOCK_PSDM, 176 BLOCK_TSEM, 177 BLOCK_MSEM, 178 BLOCK_USEM, 179 BLOCK_XSEM, 180 BLOCK_YSEM, 181 BLOCK_PSEM, 182 BLOCK_RSS, 183 BLOCK_TMLD, 184 BLOCK_MULD, 185 BLOCK_YULD, 186 BLOCK_XYLD, 187 BLOCK_PTLD, 188 BLOCK_YPLD, 189 BLOCK_PRM, 190 BLOCK_PBF_PB1, 191 BLOCK_PBF_PB2, 192 BLOCK_RPB, 193 BLOCK_BTB, 194 BLOCK_PBF, 195 BLOCK_RDIF, 196 BLOCK_TDIF, 197 BLOCK_CDU, 198 BLOCK_CCFC, 199 BLOCK_TCFC, 200 BLOCK_IGU, 201 BLOCK_CAU, 202 BLOCK_RGFS, 203 BLOCK_RGSRC, 204 BLOCK_TGFS, 205 BLOCK_TGSRC, 206 BLOCK_UMAC, 207 BLOCK_XMAC, 208 BLOCK_DBG, 209 BLOCK_NIG, 210 BLOCK_WOL, 211 BLOCK_BMBN, 212 BLOCK_IPC, 213 BLOCK_NWM, 214 BLOCK_NWS, 215 BLOCK_MS, 216 BLOCK_PHY_PCIE, 217 BLOCK_LED, 218 BLOCK_AVS_WRAP, 219 BLOCK_PXPREQBUS, 220 BLOCK_MISC_AEU, 221 BLOCK_BAR0_MAP, 222 MAX_BLOCK_ID 223}; 224 225 226/* 227 * binary debug buffer types 228 */ 229enum bin_dbg_buffer_type 230{ 231 BIN_BUF_DBG_MODE_TREE /* init modes tree */, 232 BIN_BUF_DBG_DUMP_REG /* GRC Dump registers */, 233 BIN_BUF_DBG_DUMP_MEM /* GRC Dump memories */, 234 BIN_BUF_DBG_IDLE_CHK_REGS /* Idle Check registers */, 235 BIN_BUF_DBG_IDLE_CHK_IMMS /* Idle Check immediates */, 236 BIN_BUF_DBG_IDLE_CHK_RULES /* Idle Check rules */, 237 BIN_BUF_DBG_IDLE_CHK_PARSING_DATA /* Idle Check parsing data */, 238 BIN_BUF_DBG_ATTN_BLOCKS /* Attention blocks */, 239 BIN_BUF_DBG_ATTN_REGS /* Attention registers */, 240 BIN_BUF_DBG_ATTN_INDEXES /* Attention indexes */, 241 BIN_BUF_DBG_ATTN_NAME_OFFSETS /* Attention name offsets */, 242 BIN_BUF_DBG_BUS_BLOCKS /* Debug Bus blocks */, 243 BIN_BUF_DBG_BUS_LINES /* Debug Bus lines */, 244 BIN_BUF_DBG_BUS_BLOCKS_USER_DATA /* Debug Bus blocks user data */, 245 BIN_BUF_DBG_BUS_LINE_NAME_OFFSETS /* Debug Bus line name offsets */, 246 BIN_BUF_DBG_PARSING_STRINGS /* Debug Tools parsing strings */, 247 MAX_BIN_DBG_BUFFER_TYPE 248}; 249 250 251/* 252 * Attention bit mapping 253 */ 254struct dbg_attn_bit_mapping 255{ 256 u16 data; 257#define DBG_ATTN_BIT_MAPPING_VAL_MASK 0x7FFF /* The index of an attention in the blocks attentions list (if is_unused_bit_cnt=0), or a number of consecutive unused attention bits (if is_unused_bit_cnt=1) */ 258#define DBG_ATTN_BIT_MAPPING_VAL_SHIFT 0 259#define DBG_ATTN_BIT_MAPPING_IS_UNUSED_BIT_CNT_MASK 0x1 /* if set, the val field indicates the number of consecutive unused attention bits */ 260#define DBG_ATTN_BIT_MAPPING_IS_UNUSED_BIT_CNT_SHIFT 15 261}; 262 263 264/* 265 * Attention block per-type data 266 */ 267struct dbg_attn_block_type_data 268{ 269 u16 names_offset /* Offset of this block attention names in the debug attention name offsets array */; 270 u16 reserved1; 271 u8 num_regs /* Number of attention registers in this block */; 272 u8 reserved2; 273 u16 regs_offset /* Offset of this blocks attention registers in the attention registers array (in dbg_attn_reg units) */; 274}; 275 276/* 277 * Block attentions 278 */ 279struct dbg_attn_block 280{ 281 struct dbg_attn_block_type_data per_type_data[2] /* attention block per-type data. Count must match the number of elements in dbg_attn_type. */; 282}; 283 284 285/* 286 * Attention register result 287 */ 288struct dbg_attn_reg_result 289{ 290 u32 data; 291#define DBG_ATTN_REG_RESULT_STS_ADDRESS_MASK 0xFFFFFF /* STS attention register GRC address (in dwords) */ 292#define DBG_ATTN_REG_RESULT_STS_ADDRESS_SHIFT 0 293#define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_MASK 0xFF /* Number of attention indexes in this register */ 294#define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_SHIFT 24 295 u16 block_attn_offset /* The offset of this registers attentions within the blocks attentions list (a value in the range 0..number of block attentions-1) */; 296 u16 reserved; 297 u32 sts_val /* Value read from the STS attention register */; 298 u32 mask_val /* Value read from the MASK attention register */; 299}; 300 301/* 302 * Attention block result 303 */ 304struct dbg_attn_block_result 305{ 306 u8 block_id /* Registers block ID */; 307 u8 data; 308#define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_MASK 0x3 /* Value from dbg_attn_type enum */ 309#define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_SHIFT 0 310#define DBG_ATTN_BLOCK_RESULT_NUM_REGS_MASK 0x3F /* Number of registers in the block in which at least one attention bit is set */ 311#define DBG_ATTN_BLOCK_RESULT_NUM_REGS_SHIFT 2 312 u16 names_offset /* Offset of this registers block attention names in the attention name offsets array */; 313 struct dbg_attn_reg_result reg_results[15] /* result data for each register in the block in which at least one attention bit is set */; 314}; 315 316 317 318/* 319 * mode header 320 */ 321struct dbg_mode_hdr 322{ 323 u16 data; 324#define DBG_MODE_HDR_EVAL_MODE_MASK 0x1 /* indicates if a mode expression should be evaluated (0/1) */ 325#define DBG_MODE_HDR_EVAL_MODE_SHIFT 0 326#define DBG_MODE_HDR_MODES_BUF_OFFSET_MASK 0x7FFF /* offset (in bytes) in modes expression buffer. valid only if eval_mode is set. */ 327#define DBG_MODE_HDR_MODES_BUF_OFFSET_SHIFT 1 328}; 329 330/* 331 * Attention register 332 */ 333struct dbg_attn_reg 334{ 335 struct dbg_mode_hdr mode /* Mode header */; 336 u16 block_attn_offset /* The offset of this registers attentions within the blocks attentions list (a value in the range 0..number of block attentions-1) */; 337 u32 data; 338#define DBG_ATTN_REG_STS_ADDRESS_MASK 0xFFFFFF /* STS attention register GRC address (in dwords) */ 339#define DBG_ATTN_REG_STS_ADDRESS_SHIFT 0 340#define DBG_ATTN_REG_NUM_REG_ATTN_MASK 0xFF /* Number of attention in this register */ 341#define DBG_ATTN_REG_NUM_REG_ATTN_SHIFT 24 342 u32 sts_clr_address /* STS_CLR attention register GRC address (in dwords) */; 343 u32 mask_address /* MASK attention register GRC address (in dwords) */; 344}; 345 346 347 348/* 349 * attention types 350 */ 351enum dbg_attn_type 352{ 353 ATTN_TYPE_INTERRUPT, 354 ATTN_TYPE_PARITY, 355 MAX_DBG_ATTN_TYPE 356}; 357 358 359/* 360 * Debug Bus block data 361 */ 362struct dbg_bus_block 363{ 364 u8 num_of_lines /* Number of debug lines in this block (excluding signature and latency events). */; 365 u8 has_latency_events /* Indicates if this block has a latency events debug line (0/1). */; 366 u16 lines_offset /* Offset of this blocks lines in the Debug Bus lines array. */; 367}; 368 369 370/* 371 * Debug Bus block user data 372 */ 373struct dbg_bus_block_user_data 374{ 375 u8 num_of_lines /* Number of debug lines in this block (excluding signature and latency events). */; 376 u8 has_latency_events /* Indicates if this block has a latency events debug line (0/1). */; 377 u16 names_offset /* Offset of this blocks lines in the debug bus line name offsets array. */; 378}; 379 380 381/* 382 * Block Debug line data 383 */ 384struct dbg_bus_line 385{ 386 u8 data; 387#define DBG_BUS_LINE_NUM_OF_GROUPS_MASK 0xF /* Number of groups in the line (0-3) */ 388#define DBG_BUS_LINE_NUM_OF_GROUPS_SHIFT 0 389#define DBG_BUS_LINE_IS_256B_MASK 0x1 /* Indicates if this is a 128b line (0) or a 256b line (1). */ 390#define DBG_BUS_LINE_IS_256B_SHIFT 4 391#define DBG_BUS_LINE_RESERVED_MASK 0x7 392#define DBG_BUS_LINE_RESERVED_SHIFT 5 393 u8 group_sizes /* Four 2-bit values, indicating the size of each group minus 1 (i.e. value=0 means size=1, value=1 means size=2, etc), starting from lsb. The sizes are in dwords (if is_256b=0) or in qwords (if is_256b=1). */; 394}; 395 396 397/* 398 * condition header for registers dump 399 */ 400struct dbg_dump_cond_hdr 401{ 402 struct dbg_mode_hdr mode /* Mode header */; 403 u8 block_id /* block ID */; 404 u8 data_size /* size in dwords of the data following this header */; 405}; 406 407 408/* 409 * memory data for registers dump 410 */ 411struct dbg_dump_mem 412{ 413 u32 dword0; 414#define DBG_DUMP_MEM_ADDRESS_MASK 0xFFFFFF /* register address (in dwords) */ 415#define DBG_DUMP_MEM_ADDRESS_SHIFT 0 416#define DBG_DUMP_MEM_MEM_GROUP_ID_MASK 0xFF /* memory group ID */ 417#define DBG_DUMP_MEM_MEM_GROUP_ID_SHIFT 24 418 u32 dword1; 419#define DBG_DUMP_MEM_LENGTH_MASK 0xFFFFFF /* register size (in dwords) */ 420#define DBG_DUMP_MEM_LENGTH_SHIFT 0 421#define DBG_DUMP_MEM_WIDE_BUS_MASK 0x1 /* indicates if the register is wide-bus */ 422#define DBG_DUMP_MEM_WIDE_BUS_SHIFT 24 423#define DBG_DUMP_MEM_RESERVED_MASK 0x7F 424#define DBG_DUMP_MEM_RESERVED_SHIFT 25 425}; 426 427 428/* 429 * register data for registers dump 430 */ 431struct dbg_dump_reg 432{ 433 u32 data; 434#define DBG_DUMP_REG_ADDRESS_MASK 0x7FFFFF /* register address (in dwords) */ 435#define DBG_DUMP_REG_ADDRESS_SHIFT 0 436#define DBG_DUMP_REG_WIDE_BUS_MASK 0x1 /* indicates if the register is wide-bus */ 437#define DBG_DUMP_REG_WIDE_BUS_SHIFT 23 438#define DBG_DUMP_REG_LENGTH_MASK 0xFF /* register size (in dwords) */ 439#define DBG_DUMP_REG_LENGTH_SHIFT 24 440}; 441 442 443/* 444 * split header for registers dump 445 */ 446struct dbg_dump_split_hdr 447{ 448 u32 hdr; 449#define DBG_DUMP_SPLIT_HDR_DATA_SIZE_MASK 0xFFFFFF /* size in dwords of the data following this header */ 450#define DBG_DUMP_SPLIT_HDR_DATA_SIZE_SHIFT 0 451#define DBG_DUMP_SPLIT_HDR_SPLIT_TYPE_ID_MASK 0xFF /* split type ID */ 452#define DBG_DUMP_SPLIT_HDR_SPLIT_TYPE_ID_SHIFT 24 453}; 454 455 456/* 457 * condition header for idle check 458 */ 459struct dbg_idle_chk_cond_hdr 460{ 461 struct dbg_mode_hdr mode /* Mode header */; 462 u16 data_size /* size in dwords of the data following this header */; 463}; 464 465 466/* 467 * Idle Check condition register 468 */ 469struct dbg_idle_chk_cond_reg 470{ 471 u32 data; 472#define DBG_IDLE_CHK_COND_REG_ADDRESS_MASK 0x7FFFFF /* Register GRC address (in dwords) */ 473#define DBG_IDLE_CHK_COND_REG_ADDRESS_SHIFT 0 474#define DBG_IDLE_CHK_COND_REG_WIDE_BUS_MASK 0x1 /* indicates if the register is wide-bus */ 475#define DBG_IDLE_CHK_COND_REG_WIDE_BUS_SHIFT 23 476#define DBG_IDLE_CHK_COND_REG_BLOCK_ID_MASK 0xFF /* value from block_id enum */ 477#define DBG_IDLE_CHK_COND_REG_BLOCK_ID_SHIFT 24 478 u16 num_entries /* number of registers entries to check */; 479 u8 entry_size /* size of registers entry (in dwords) */; 480 u8 start_entry /* index of the first entry to check */; 481}; 482 483 484/* 485 * Idle Check info register 486 */ 487struct dbg_idle_chk_info_reg 488{ 489 u32 data; 490#define DBG_IDLE_CHK_INFO_REG_ADDRESS_MASK 0x7FFFFF /* Register GRC address (in dwords) */ 491#define DBG_IDLE_CHK_INFO_REG_ADDRESS_SHIFT 0 492#define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_MASK 0x1 /* indicates if the register is wide-bus */ 493#define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_SHIFT 23 494#define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_MASK 0xFF /* value from block_id enum */ 495#define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_SHIFT 24 496 u16 size /* register size in dwords */; 497 struct dbg_mode_hdr mode /* Mode header */; 498}; 499 500 501/* 502 * Idle Check register 503 */ 504union dbg_idle_chk_reg 505{ 506 struct dbg_idle_chk_cond_reg cond_reg /* condition register */; 507 struct dbg_idle_chk_info_reg info_reg /* info register */; 508}; 509 510 511/* 512 * Idle Check result header 513 */ 514struct dbg_idle_chk_result_hdr 515{ 516 u16 rule_id /* Failing rule index */; 517 u16 mem_entry_id /* Failing memory entry index */; 518 u8 num_dumped_cond_regs /* number of dumped condition registers */; 519 u8 num_dumped_info_regs /* number of dumped condition registers */; 520 u8 severity /* from dbg_idle_chk_severity_types enum */; 521 u8 reserved; 522}; 523 524 525/* 526 * Idle Check result register header 527 */ 528struct dbg_idle_chk_result_reg_hdr 529{ 530 u8 data; 531#define DBG_IDLE_CHK_RESULT_REG_HDR_IS_MEM_MASK 0x1 /* indicates if this register is a memory */ 532#define DBG_IDLE_CHK_RESULT_REG_HDR_IS_MEM_SHIFT 0 533#define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_MASK 0x7F /* register index within the failing rule */ 534#define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_SHIFT 1 535 u8 start_entry /* index of the first checked entry */; 536 u16 size /* register size in dwords */; 537}; 538 539 540/* 541 * Idle Check rule 542 */ 543struct dbg_idle_chk_rule 544{ 545 u16 rule_id /* Idle Check rule ID */; 546 u8 severity /* value from dbg_idle_chk_severity_types enum */; 547 u8 cond_id /* Condition ID */; 548 u8 num_cond_regs /* number of condition registers */; 549 u8 num_info_regs /* number of info registers */; 550 u8 num_imms /* number of immediates in the condition */; 551 u8 reserved1; 552 u16 reg_offset /* offset of this rules registers in the idle check register array (in dbg_idle_chk_reg units) */; 553 u16 imm_offset /* offset of this rules immediate values in the immediate values array (in dwords) */; 554}; 555 556 557/* 558 * Idle Check rule parsing data 559 */ 560struct dbg_idle_chk_rule_parsing_data 561{ 562 u32 data; 563#define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_MASK 0x1 /* indicates if this register has a FW message */ 564#define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_SHIFT 0 565#define DBG_IDLE_CHK_RULE_PARSING_DATA_STR_OFFSET_MASK 0x7FFFFFFF /* Offset of this rules strings in the debug strings array (in bytes) */ 566#define DBG_IDLE_CHK_RULE_PARSING_DATA_STR_OFFSET_SHIFT 1 567}; 568 569 570/* 571 * idle check severity types 572 */ 573enum dbg_idle_chk_severity_types 574{ 575 IDLE_CHK_SEVERITY_ERROR /* idle check failure should cause an error */, 576 IDLE_CHK_SEVERITY_ERROR_NO_TRAFFIC /* idle check failure should cause an error only if theres no traffic */, 577 IDLE_CHK_SEVERITY_WARNING /* idle check failure should cause a warning */, 578 MAX_DBG_IDLE_CHK_SEVERITY_TYPES 579}; 580 581 582 583/* 584 * Debug Bus block data 585 */ 586struct dbg_bus_block_data 587{ 588 u16 data; 589#define DBG_BUS_BLOCK_DATA_ENABLE_MASK_MASK 0xF /* 4-bit value: bit i set -> dword/qword i is enabled. */ 590#define DBG_BUS_BLOCK_DATA_ENABLE_MASK_SHIFT 0 591#define DBG_BUS_BLOCK_DATA_RIGHT_SHIFT_MASK 0xF /* Number of dwords/qwords to shift right the debug data (0-3) */ 592#define DBG_BUS_BLOCK_DATA_RIGHT_SHIFT_SHIFT 4 593#define DBG_BUS_BLOCK_DATA_FORCE_VALID_MASK_MASK 0xF /* 4-bit value: bit i set -> dword/qword i is forced valid. */ 594#define DBG_BUS_BLOCK_DATA_FORCE_VALID_MASK_SHIFT 8 595#define DBG_BUS_BLOCK_DATA_FORCE_FRAME_MASK_MASK 0xF /* 4-bit value: bit i set -> dword/qword i frame bit is forced. */ 596#define DBG_BUS_BLOCK_DATA_FORCE_FRAME_MASK_SHIFT 12 597 u8 line_num /* Debug line number to select */; 598 u8 hw_id /* HW ID associated with the block */; 599}; 600 601 602/* 603 * Debug Bus Clients 604 */ 605enum dbg_bus_clients 606{ 607 DBG_BUS_CLIENT_RBCN, 608 DBG_BUS_CLIENT_RBCP, 609 DBG_BUS_CLIENT_RBCR, 610 DBG_BUS_CLIENT_RBCT, 611 DBG_BUS_CLIENT_RBCU, 612 DBG_BUS_CLIENT_RBCF, 613 DBG_BUS_CLIENT_RBCX, 614 DBG_BUS_CLIENT_RBCS, 615 DBG_BUS_CLIENT_RBCH, 616 DBG_BUS_CLIENT_RBCZ, 617 DBG_BUS_CLIENT_OTHER_ENGINE, 618 DBG_BUS_CLIENT_TIMESTAMP, 619 DBG_BUS_CLIENT_CPU, 620 DBG_BUS_CLIENT_RBCY, 621 DBG_BUS_CLIENT_RBCQ, 622 DBG_BUS_CLIENT_RBCM, 623 DBG_BUS_CLIENT_RBCB, 624 DBG_BUS_CLIENT_RBCW, 625 DBG_BUS_CLIENT_RBCV, 626 MAX_DBG_BUS_CLIENTS 627}; 628 629 630/* 631 * Debug Bus constraint operation types 632 */ 633enum dbg_bus_constraint_ops 634{ 635 DBG_BUS_CONSTRAINT_OP_EQ /* equal */, 636 DBG_BUS_CONSTRAINT_OP_NE /* not equal */, 637 DBG_BUS_CONSTRAINT_OP_LT /* less than */, 638 DBG_BUS_CONSTRAINT_OP_LTC /* less than (cyclic) */, 639 DBG_BUS_CONSTRAINT_OP_LE /* less than or equal */, 640 DBG_BUS_CONSTRAINT_OP_LEC /* less than or equal (cyclic) */, 641 DBG_BUS_CONSTRAINT_OP_GT /* greater than */, 642 DBG_BUS_CONSTRAINT_OP_GTC /* greater than (cyclic) */, 643 DBG_BUS_CONSTRAINT_OP_GE /* greater than or equal */, 644 DBG_BUS_CONSTRAINT_OP_GEC /* greater than or equal (cyclic) */, 645 MAX_DBG_BUS_CONSTRAINT_OPS 646}; 647 648 649/* 650 * Debug Bus trigger state data 651 */ 652struct dbg_bus_trigger_state_data 653{ 654 u8 data; 655#define DBG_BUS_TRIGGER_STATE_DATA_BLOCK_SHIFTED_ENABLE_MASK_MASK 0xF /* 4-bit value: bit i set -> dword i of the trigger state block (after right shift) is enabled. */ 656#define DBG_BUS_TRIGGER_STATE_DATA_BLOCK_SHIFTED_ENABLE_MASK_SHIFT 0 657#define DBG_BUS_TRIGGER_STATE_DATA_CONSTRAINT_DWORD_MASK_MASK 0xF /* 4-bit value: bit i set -> dword i is compared by a constraint */ 658#define DBG_BUS_TRIGGER_STATE_DATA_CONSTRAINT_DWORD_MASK_SHIFT 4 659}; 660 661/* 662 * Debug Bus memory address 663 */ 664struct dbg_bus_mem_addr 665{ 666 u32 lo; 667 u32 hi; 668}; 669 670/* 671 * Debug Bus PCI buffer data 672 */ 673struct dbg_bus_pci_buf_data 674{ 675 struct dbg_bus_mem_addr phys_addr /* PCI buffer physical address */; 676 struct dbg_bus_mem_addr virt_addr /* PCI buffer virtual address */; 677 u32 size /* PCI buffer size in bytes */; 678}; 679 680/* 681 * Debug Bus Storm EID range filter params 682 */ 683struct dbg_bus_storm_eid_range_params 684{ 685 u8 min /* Minimal event ID to filter on */; 686 u8 max /* Maximal event ID to filter on */; 687}; 688 689/* 690 * Debug Bus Storm EID mask filter params 691 */ 692struct dbg_bus_storm_eid_mask_params 693{ 694 u8 val /* Event ID value */; 695 u8 mask /* Event ID mask. 1s in the mask = dont care bits. */; 696}; 697 698/* 699 * Debug Bus Storm EID filter params 700 */ 701union dbg_bus_storm_eid_params 702{ 703 struct dbg_bus_storm_eid_range_params range /* EID range filter params */; 704 struct dbg_bus_storm_eid_mask_params mask /* EID mask filter params */; 705}; 706 707/* 708 * Debug Bus Storm data 709 */ 710struct dbg_bus_storm_data 711{ 712 u8 enabled /* indicates if the Storm is enabled for recording */; 713 u8 mode /* Storm debug mode, valid only if the Storm is enabled (use enum dbg_bus_storm_modes) */; 714 u8 hw_id /* HW ID associated with the Storm */; 715 u8 eid_filter_en /* Indicates if EID filtering is performed (0/1) */; 716 u8 eid_range_not_mask /* 1 = EID range filter, 0 = EID mask filter. Valid only if eid_filter_en is set, */; 717 u8 cid_filter_en /* Indicates if CID filtering is performed (0/1) */; 718 union dbg_bus_storm_eid_params eid_filter_params /* EID filter params to filter on. Valid only if eid_filter_en is set. */; 719 u32 cid /* CID to filter on. Valid only if cid_filter_en is set. */; 720}; 721 722/* 723 * Debug Bus data 724 */ 725struct dbg_bus_data 726{ 727 u32 app_version /* The tools version number of the application */; 728 u8 state /* The current debug bus state (use enum dbg_bus_states) */; 729 u8 hw_dwords /* HW dwords per cycle */; 730 u16 hw_id_mask /* The HW IDs of the recorded HW blocks, where bits i*3..i*3+2 contain the HW ID of dword/qword i */; 731 u8 num_enabled_blocks /* Number of blocks enabled for recording */; 732 u8 num_enabled_storms /* Number of Storms enabled for recording */; 733 u8 target /* Output target (use enum dbg_bus_targets) */; 734 u8 one_shot_en /* Indicates if one-shot mode is enabled (0/1) */; 735 u8 grc_input_en /* Indicates if GRC recording is enabled (0/1) */; 736 u8 timestamp_input_en /* Indicates if timestamp recording is enabled (0/1) */; 737 u8 filter_en /* Indicates if the recording filter is enabled (0/1) */; 738 u8 adding_filter /* If true, the next added constraint belong to the filter. Otherwise, it belongs to the last added trigger state. Valid only if either filter or triggers are enabled. */; 739 u8 filter_pre_trigger /* Indicates if the recording filter should be applied before the trigger. Valid only if both filter and trigger are enabled (0/1) */; 740 u8 filter_post_trigger /* Indicates if the recording filter should be applied after the trigger. Valid only if both filter and trigger are enabled (0/1) */; 741 u16 reserved; 742 u8 trigger_en /* Indicates if the recording trigger is enabled (0/1) */; 743 struct dbg_bus_trigger_state_data trigger_states[3] /* trigger states data */; 744 u8 next_trigger_state /* ID of next trigger state to be added */; 745 u8 next_constraint_id /* ID of next filter/trigger constraint to be added */; 746 u8 unify_inputs /* If true, all inputs are associated with HW ID 0. Otherwise, each input is assigned a different HW ID (0/1) */; 747 u8 rcv_from_other_engine /* Indicates if the other engine sends it NW recording to this engine (0/1) */; 748 struct dbg_bus_pci_buf_data pci_buf /* Debug Bus PCI buffer data. Valid only when the target is DBG_BUS_TARGET_ID_PCI. */; 749 struct dbg_bus_block_data blocks[88] /* Debug Bus data for each block */; 750 struct dbg_bus_storm_data storms[6] /* Debug Bus data for each block */; 751}; 752 753 754/* 755 * Debug bus filter types 756 */ 757enum dbg_bus_filter_types 758{ 759 DBG_BUS_FILTER_TYPE_OFF /* filter always off */, 760 DBG_BUS_FILTER_TYPE_PRE /* filter before trigger only */, 761 DBG_BUS_FILTER_TYPE_POST /* filter after trigger only */, 762 DBG_BUS_FILTER_TYPE_ON /* filter always on */, 763 MAX_DBG_BUS_FILTER_TYPES 764}; 765 766 767/* 768 * Debug bus frame modes 769 */ 770enum dbg_bus_frame_modes 771{ 772 DBG_BUS_FRAME_MODE_0HW_4ST=0 /* 0 HW dwords, 4 Storm dwords */, 773 DBG_BUS_FRAME_MODE_4HW_0ST=3 /* 4 HW dwords, 0 Storm dwords */, 774 DBG_BUS_FRAME_MODE_8HW_0ST=4 /* 8 HW dwords, 0 Storm dwords */, 775 MAX_DBG_BUS_FRAME_MODES 776}; 777 778 779 780/* 781 * Debug bus other engine mode 782 */ 783enum dbg_bus_other_engine_modes 784{ 785 DBG_BUS_OTHER_ENGINE_MODE_NONE, 786 DBG_BUS_OTHER_ENGINE_MODE_DOUBLE_BW_TX, 787 DBG_BUS_OTHER_ENGINE_MODE_DOUBLE_BW_RX, 788 DBG_BUS_OTHER_ENGINE_MODE_CROSS_ENGINE_TX, 789 DBG_BUS_OTHER_ENGINE_MODE_CROSS_ENGINE_RX, 790 MAX_DBG_BUS_OTHER_ENGINE_MODES 791}; 792 793 794 795/* 796 * Debug bus post-trigger recording types 797 */ 798enum dbg_bus_post_trigger_types 799{ 800 DBG_BUS_POST_TRIGGER_RECORD /* start recording after trigger */, 801 DBG_BUS_POST_TRIGGER_DROP /* drop data after trigger */, 802 MAX_DBG_BUS_POST_TRIGGER_TYPES 803}; 804 805 806/* 807 * Debug bus pre-trigger recording types 808 */ 809enum dbg_bus_pre_trigger_types 810{ 811 DBG_BUS_PRE_TRIGGER_START_FROM_ZERO /* start recording from time 0 */, 812 DBG_BUS_PRE_TRIGGER_NUM_CHUNKS /* start recording some chunks before trigger */, 813 DBG_BUS_PRE_TRIGGER_DROP /* drop data before trigger */, 814 MAX_DBG_BUS_PRE_TRIGGER_TYPES 815}; 816 817 818/* 819 * Debug bus SEMI frame modes 820 */ 821enum dbg_bus_semi_frame_modes 822{ 823 DBG_BUS_SEMI_FRAME_MODE_0SLOW_4FAST=0 /* 0 slow dwords, 4 fast dwords */, 824 DBG_BUS_SEMI_FRAME_MODE_4SLOW_0FAST=3 /* 4 slow dwords, 0 fast dwords */, 825 MAX_DBG_BUS_SEMI_FRAME_MODES 826}; 827 828 829/* 830 * Debug bus states 831 */ 832enum dbg_bus_states 833{ 834 DBG_BUS_STATE_IDLE /* debug bus idle state (not recording) */, 835 DBG_BUS_STATE_READY /* debug bus is ready for configuration and recording */, 836 DBG_BUS_STATE_RECORDING /* debug bus is currently recording */, 837 DBG_BUS_STATE_STOPPED /* debug bus recording has stopped */, 838 MAX_DBG_BUS_STATES 839}; 840 841 842 843 844 845 846/* 847 * Debug Bus Storm modes 848 */ 849enum dbg_bus_storm_modes 850{ 851 DBG_BUS_STORM_MODE_PRINTF /* store data (fast debug) */, 852 DBG_BUS_STORM_MODE_PRAM_ADDR /* pram address (fast debug) */, 853 DBG_BUS_STORM_MODE_DRA_RW /* DRA read/write data (fast debug) */, 854 DBG_BUS_STORM_MODE_DRA_W /* DRA write data (fast debug) */, 855 DBG_BUS_STORM_MODE_LD_ST_ADDR /* load/store address (fast debug) */, 856 DBG_BUS_STORM_MODE_DRA_FSM /* DRA state machines (fast debug) */, 857 DBG_BUS_STORM_MODE_RH /* recording handlers (fast debug) */, 858 DBG_BUS_STORM_MODE_FOC /* FOC: FIN + DRA Rd (slow debug) */, 859 DBG_BUS_STORM_MODE_EXT_STORE /* FOC: External Store (slow) */, 860 MAX_DBG_BUS_STORM_MODES 861}; 862 863 864/* 865 * Debug bus target IDs 866 */ 867enum dbg_bus_targets 868{ 869 DBG_BUS_TARGET_ID_INT_BUF /* records debug bus to DBG block internal buffer */, 870 DBG_BUS_TARGET_ID_NIG /* records debug bus to the NW */, 871 DBG_BUS_TARGET_ID_PCI /* records debug bus to a PCI buffer */, 872 MAX_DBG_BUS_TARGETS 873}; 874 875 876 877/* 878 * GRC Dump data 879 */ 880struct dbg_grc_data 881{ 882 u8 params_initialized /* Indicates if the GRC parameters were initialized */; 883 u8 reserved1; 884 u16 reserved2; 885 u32 param_val[48] /* Value of each GRC parameter. Array size must match the enum dbg_grc_params. */; 886}; 887 888 889/* 890 * Debug GRC params 891 */ 892enum dbg_grc_params 893{ 894 DBG_GRC_PARAM_DUMP_TSTORM /* dump Tstorm memories (0/1) */, 895 DBG_GRC_PARAM_DUMP_MSTORM /* dump Mstorm memories (0/1) */, 896 DBG_GRC_PARAM_DUMP_USTORM /* dump Ustorm memories (0/1) */, 897 DBG_GRC_PARAM_DUMP_XSTORM /* dump Xstorm memories (0/1) */, 898 DBG_GRC_PARAM_DUMP_YSTORM /* dump Ystorm memories (0/1) */, 899 DBG_GRC_PARAM_DUMP_PSTORM /* dump Pstorm memories (0/1) */, 900 DBG_GRC_PARAM_DUMP_REGS /* dump non-memory registers (0/1) */, 901 DBG_GRC_PARAM_DUMP_RAM /* dump Storm internal RAMs (0/1) */, 902 DBG_GRC_PARAM_DUMP_PBUF /* dump Storm passive buffer (0/1) */, 903 DBG_GRC_PARAM_DUMP_IOR /* dump Storm IORs (0/1) */, 904 DBG_GRC_PARAM_DUMP_VFC /* dump VFC memories (0/1) */, 905 DBG_GRC_PARAM_DUMP_CM_CTX /* dump CM contexts (0/1) */, 906 DBG_GRC_PARAM_DUMP_PXP /* dump PXP memories (0/1) */, 907 DBG_GRC_PARAM_DUMP_RSS /* dump RSS memories (0/1) */, 908 DBG_GRC_PARAM_DUMP_CAU /* dump CAU memories (0/1) */, 909 DBG_GRC_PARAM_DUMP_QM /* dump QM memories (0/1) */, 910 DBG_GRC_PARAM_DUMP_MCP /* dump MCP memories (0/1) */, 911 DBG_GRC_PARAM_RESERVED /* reserved */, 912 DBG_GRC_PARAM_DUMP_CFC /* dump CFC memories (0/1) */, 913 DBG_GRC_PARAM_DUMP_IGU /* dump IGU memories (0/1) */, 914 DBG_GRC_PARAM_DUMP_BRB /* dump BRB memories (0/1) */, 915 DBG_GRC_PARAM_DUMP_BTB /* dump BTB memories (0/1) */, 916 DBG_GRC_PARAM_DUMP_BMB /* dump BMB memories (0/1) */, 917 DBG_GRC_PARAM_DUMP_NIG /* dump NIG memories (0/1) */, 918 DBG_GRC_PARAM_DUMP_MULD /* dump MULD memories (0/1) */, 919 DBG_GRC_PARAM_DUMP_PRS /* dump PRS memories (0/1) */, 920 DBG_GRC_PARAM_DUMP_DMAE /* dump PRS memories (0/1) */, 921 DBG_GRC_PARAM_DUMP_TM /* dump TM (timers) memories (0/1) */, 922 DBG_GRC_PARAM_DUMP_SDM /* dump SDM memories (0/1) */, 923 DBG_GRC_PARAM_DUMP_DIF /* dump DIF memories (0/1) */, 924 DBG_GRC_PARAM_DUMP_STATIC /* dump static debug data (0/1) */, 925 DBG_GRC_PARAM_UNSTALL /* un-stall Storms after dump (0/1) */, 926 DBG_GRC_PARAM_NUM_LCIDS /* number of LCIDs (0..320) */, 927 DBG_GRC_PARAM_NUM_LTIDS /* number of LTIDs (0..320) */, 928 DBG_GRC_PARAM_EXCLUDE_ALL /* preset: exclude all memories from dump (1 only) */, 929 DBG_GRC_PARAM_CRASH /* preset: include memories for crash dump (1 only) */, 930 DBG_GRC_PARAM_PARITY_SAFE /* perform dump only if MFW is responding (0/1) */, 931 DBG_GRC_PARAM_DUMP_CM /* dump CM memories (0/1) */, 932 DBG_GRC_PARAM_DUMP_PHY /* dump PHY memories (0/1) */, 933 DBG_GRC_PARAM_NO_MCP /* dont perform MCP commands (0/1) */, 934 DBG_GRC_PARAM_NO_FW_VER /* dont read FW/MFW version (0/1) */, 935 MAX_DBG_GRC_PARAMS 936}; 937 938 939/* 940 * Debug reset registers 941 */ 942enum dbg_reset_regs 943{ 944 DBG_RESET_REG_MISCS_PL_UA, 945 DBG_RESET_REG_MISCS_PL_HV, 946 DBG_RESET_REG_MISCS_PL_HV_2, 947 DBG_RESET_REG_MISC_PL_UA, 948 DBG_RESET_REG_MISC_PL_HV, 949 DBG_RESET_REG_MISC_PL_PDA_VMAIN_1, 950 DBG_RESET_REG_MISC_PL_PDA_VMAIN_2, 951 DBG_RESET_REG_MISC_PL_PDA_VAUX, 952 MAX_DBG_RESET_REGS 953}; 954 955 956/* 957 * Debug status codes 958 */ 959enum dbg_status 960{ 961 DBG_STATUS_OK, 962 DBG_STATUS_APP_VERSION_NOT_SET, 963 DBG_STATUS_UNSUPPORTED_APP_VERSION, 964 DBG_STATUS_DBG_BLOCK_NOT_RESET, 965 DBG_STATUS_INVALID_ARGS, 966 DBG_STATUS_OUTPUT_ALREADY_SET, 967 DBG_STATUS_INVALID_PCI_BUF_SIZE, 968 DBG_STATUS_PCI_BUF_ALLOC_FAILED, 969 DBG_STATUS_PCI_BUF_NOT_ALLOCATED, 970 DBG_STATUS_TOO_MANY_INPUTS, 971 DBG_STATUS_INPUT_OVERLAP, 972 DBG_STATUS_HW_ONLY_RECORDING, 973 DBG_STATUS_STORM_ALREADY_ENABLED, 974 DBG_STATUS_STORM_NOT_ENABLED, 975 DBG_STATUS_BLOCK_ALREADY_ENABLED, 976 DBG_STATUS_BLOCK_NOT_ENABLED, 977 DBG_STATUS_NO_INPUT_ENABLED, 978 DBG_STATUS_NO_FILTER_TRIGGER_64B, 979 DBG_STATUS_FILTER_ALREADY_ENABLED, 980 DBG_STATUS_TRIGGER_ALREADY_ENABLED, 981 DBG_STATUS_TRIGGER_NOT_ENABLED, 982 DBG_STATUS_CANT_ADD_CONSTRAINT, 983 DBG_STATUS_TOO_MANY_TRIGGER_STATES, 984 DBG_STATUS_TOO_MANY_CONSTRAINTS, 985 DBG_STATUS_RECORDING_NOT_STARTED, 986 DBG_STATUS_DATA_DIDNT_TRIGGER, 987 DBG_STATUS_NO_DATA_RECORDED, 988 DBG_STATUS_DUMP_BUF_TOO_SMALL, 989 DBG_STATUS_DUMP_NOT_CHUNK_ALIGNED, 990 DBG_STATUS_UNKNOWN_CHIP, 991 DBG_STATUS_VIRT_MEM_ALLOC_FAILED, 992 DBG_STATUS_BLOCK_IN_RESET, 993 DBG_STATUS_INVALID_TRACE_SIGNATURE, 994 DBG_STATUS_INVALID_NVRAM_BUNDLE, 995 DBG_STATUS_NVRAM_GET_IMAGE_FAILED, 996 DBG_STATUS_NON_ALIGNED_NVRAM_IMAGE, 997 DBG_STATUS_NVRAM_READ_FAILED, 998 DBG_STATUS_IDLE_CHK_PARSE_FAILED, 999 DBG_STATUS_MCP_TRACE_BAD_DATA, 1000 DBG_STATUS_MCP_TRACE_NO_META, 1001 DBG_STATUS_MCP_COULD_NOT_HALT, 1002 DBG_STATUS_MCP_COULD_NOT_RESUME, 1003 DBG_STATUS_RESERVED2, 1004 DBG_STATUS_SEMI_FIFO_NOT_EMPTY, 1005 DBG_STATUS_IGU_FIFO_BAD_DATA, 1006 DBG_STATUS_MCP_COULD_NOT_MASK_PRTY, 1007 DBG_STATUS_FW_ASSERTS_PARSE_FAILED, 1008 DBG_STATUS_REG_FIFO_BAD_DATA, 1009 DBG_STATUS_PROTECTION_OVERRIDE_BAD_DATA, 1010 DBG_STATUS_DBG_ARRAY_NOT_SET, 1011 DBG_STATUS_FILTER_BUG, 1012 DBG_STATUS_NON_MATCHING_LINES, 1013 DBG_STATUS_INVALID_TRIGGER_DWORD_OFFSET, 1014 DBG_STATUS_DBG_BUS_IN_USE, 1015 MAX_DBG_STATUS 1016}; 1017 1018 1019/* 1020 * Debug Storms IDs 1021 */ 1022enum dbg_storms 1023{ 1024 DBG_TSTORM_ID, 1025 DBG_MSTORM_ID, 1026 DBG_USTORM_ID, 1027 DBG_XSTORM_ID, 1028 DBG_YSTORM_ID, 1029 DBG_PSTORM_ID, 1030 MAX_DBG_STORMS 1031}; 1032 1033 1034/* 1035 * Idle Check data 1036 */ 1037struct idle_chk_data 1038{ 1039 u32 buf_size /* Idle check buffer size in dwords */; 1040 u8 buf_size_set /* Indicates if the idle check buffer size was set (0/1) */; 1041 u8 reserved1; 1042 u16 reserved2; 1043}; 1044 1045/* 1046 * Debug Tools data (per HW function) 1047 */ 1048struct dbg_tools_data 1049{ 1050 struct dbg_grc_data grc /* GRC Dump data */; 1051 struct dbg_bus_data bus /* Debug Bus data */; 1052 struct idle_chk_data idle_chk /* Idle Check data */; 1053 u8 mode_enable[40] /* Indicates if a mode is enabled (0/1) */; 1054 u8 block_in_reset[88] /* Indicates if a block is in reset state (0/1) */; 1055 u8 chip_id /* Chip ID (from enum chip_ids) */; 1056 u8 platform_id /* Platform ID */; 1057 u8 initialized /* Indicates if the data was initialized */; 1058 u8 use_dmae /* Indicates if DMAE should be used */; 1059 u32 num_regs_read /* Numbers of registers that were read since last log */; 1060}; 1061 1062 1063#endif /* __ECORE_HSI_DEBUG_TOOLS__ */ 1064