Lines Matching +full:reg +full:- +full:names
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
4 * Copyright (c) 2019-2020 Marvell International Ltd.
52 /* Memory groups names */
151 return r[0] < (r[1] - imm[0]); in cond8()
232 * Addresses are in bytes, sizes are in quad-regs.
340 (((1 << FIELD_BIT_SIZE(type, field)) - 1) << \
362 (GET_FIELD((block)->flags, DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS) ? 2 : 1)
364 ((block)->num_of_dbg_bus_lines + NUM_EXTRA_DBG_LINES(block))
828 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_set_param()
830 dev_data->grc.param_val[grc_param] = val; in qed_grc_set_param()
837 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_get_param()
839 return dev_data->grc.param_val[grc_param]; in qed_grc_get_param()
845 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_init_params()
847 if (!dev_data->grc.params_initialized) { in qed_dbg_grc_init_params()
849 dev_data->grc.params_initialized = 1; in qed_dbg_grc_init_params()
858 struct virt_mem_desc *buf = &p_hwfn->dbg_arrays[buf_type]; in qed_set_dbg_bin_buf()
860 buf->ptr = (void *)ptr; in qed_set_dbg_bin_buf()
861 buf->size = size; in qed_set_dbg_bin_buf()
867 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_dev_init()
870 if (dev_data->initialized) in qed_dbg_dev_init()
874 if (QED_IS_K2(p_hwfn->cdev)) { in qed_dbg_dev_init()
875 dev_data->chip_id = CHIP_K2; in qed_dbg_dev_init()
876 dev_data->mode_enable[MODE_K2] = 1; in qed_dbg_dev_init()
877 dev_data->num_vfs = MAX_NUM_VFS_K2; in qed_dbg_dev_init()
880 } else if (QED_IS_BB_B0(p_hwfn->cdev)) { in qed_dbg_dev_init()
881 dev_data->chip_id = CHIP_BB; in qed_dbg_dev_init()
882 dev_data->mode_enable[MODE_BB] = 1; in qed_dbg_dev_init()
883 dev_data->num_vfs = MAX_NUM_VFS_BB; in qed_dbg_dev_init()
891 dev_data->hw_type = HW_TYPE_ASIC; in qed_dbg_dev_init()
892 dev_data->mode_enable[MODE_ASIC] = 1; in qed_dbg_dev_init()
895 switch (p_hwfn->cdev->num_ports_in_engine) { in qed_dbg_dev_init()
897 dev_data->mode_enable[MODE_PORTS_PER_ENG_1] = 1; in qed_dbg_dev_init()
900 dev_data->mode_enable[MODE_PORTS_PER_ENG_2] = 1; in qed_dbg_dev_init()
903 dev_data->mode_enable[MODE_PORTS_PER_ENG_4] = 1; in qed_dbg_dev_init()
908 if (QED_IS_CMT(p_hwfn->cdev)) in qed_dbg_dev_init()
909 dev_data->mode_enable[MODE_100G] = 1; in qed_dbg_dev_init()
912 if (dev_data->mode_enable[MODE_PORTS_PER_ENG_1] || in qed_dbg_dev_init()
913 dev_data->mode_enable[MODE_100G]) in qed_dbg_dev_init()
914 dev_data->num_ports = 1; in qed_dbg_dev_init()
915 else if (dev_data->mode_enable[MODE_PORTS_PER_ENG_2]) in qed_dbg_dev_init()
916 dev_data->num_ports = 2; in qed_dbg_dev_init()
917 else if (dev_data->mode_enable[MODE_PORTS_PER_ENG_4]) in qed_dbg_dev_init()
918 dev_data->num_ports = 4; in qed_dbg_dev_init()
921 dev_data->num_pfs_per_port = min_t(u32, in qed_dbg_dev_init()
922 num_pfs / dev_data->num_ports, in qed_dbg_dev_init()
928 dev_data->use_dmae = true; in qed_dbg_dev_init()
929 dev_data->initialized = 1; in qed_dbg_dev_init()
939 dbg_block = p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS].ptr; in get_dbg_block()
948 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_get_dbg_block_per_chip()
951 p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS_CHIP_DATA].ptr + in qed_get_dbg_block_per_chip()
952 block_id * MAX_CHIP_IDS + dev_data->chip_id; in qed_get_dbg_block_per_chip()
959 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_get_dbg_reset_reg()
962 p_hwfn->dbg_arrays[BIN_BUF_DBG_RESET_REGS].ptr + in qed_get_dbg_reset_reg()
963 reset_reg_id * MAX_CHIP_IDS + dev_data->chip_id; in qed_get_dbg_reset_reg()
983 addr = storm->sem_fast_mem_addr + SEM_FAST_REG_INT_RAM + in qed_read_storm_fw_info()
984 DWORDS_TO_BYTES(SEM_FAST_REG_INT_RAM_SIZE) - in qed_read_storm_fw_info()
1032 align_size = offset_in_dword ? BYTES_IN_DWORD - offset_in_dword : 0; in qed_dump_align()
1131 dump, "fw-version", fw_ver_str); in qed_dump_fw_ver_param()
1133 dump, "fw-image", fw_img_str); in qed_dump_fw_ver_param()
1134 offset += qed_dump_num_param(dump_buf + offset, dump, "fw-timestamp", in qed_dump_fw_ver_param()
1186 return qed_dump_str_param(dump_buf, dump, "mfw-version", mfw_ver_str); in qed_dump_mfw_ver_param()
1196 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dump_chip_revision_param()
1199 if (dev_data->hw_type == HW_TYPE_ASIC) { in qed_dump_chip_revision_param()
1209 return qed_dump_str_param(dump_buf, dump, "chip-revision", param_str); in qed_dump_chip_revision_param()
1230 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dump_common_global_params()
1236 (dev_data->chip_id == CHIP_BB ? 1 : 0); in qed_dump_common_global_params()
1247 dump, "tools-version", TOOLS_VERSION); in qed_dump_common_global_params()
1251 s_chip_defs[dev_data->chip_id].name); in qed_dump_common_global_params()
1255 s_hw_type_defs[dev_data->hw_type].name); in qed_dump_common_global_params()
1257 dump, "pci-func", p_hwfn->abs_pf_id); in qed_dump_common_global_params()
1258 if (dev_data->chip_id == CHIP_BB) in qed_dump_common_global_params()
1283 return offset - start_offset; in qed_dump_last_section()
1290 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_update_blocks_reset_state()
1302 rst_reg_removed = GET_FIELD(rst_reg->data, in qed_update_blocks_reset_state()
1304 rst_reg_addr = DWORDS_TO_BYTES(GET_FIELD(rst_reg->data, in qed_update_blocks_reset_state()
1319 is_removed = GET_FIELD(blk->flags, DBG_BLOCK_CHIP_IS_REMOVED); in qed_update_blocks_reset_state()
1320 has_rst_reg = GET_FIELD(blk->flags, in qed_update_blocks_reset_state()
1324 dev_data->block_in_reset[blk_id] = in qed_update_blocks_reset_state()
1325 !(reg_val[blk->reset_reg_id] & in qed_update_blocks_reset_state()
1326 BIT(blk->reset_reg_bit_offset)); in qed_update_blocks_reset_state()
1334 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_is_mode_match_rec()
1346 dbg_array = p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr; in qed_is_mode_match_rec()
1362 return dev_data->mode_enable[tree_val - MAX_INIT_MODE_OPS] > 0; in qed_is_mode_match_rec()
1388 reset_reg = qed_get_dbg_reset_reg(p_hwfn, block->reset_reg_id); in qed_bus_reset_dbg_block()
1390 DWORDS_TO_BYTES(GET_FIELD(reset_reg->data, DBG_RESET_REG_ADDR)); in qed_bus_reset_dbg_block()
1394 old_reset_reg_val & ~BIT(block->reset_reg_bit_offset); in qed_bus_reset_dbg_block()
1420 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_select_reg_addr), in qed_bus_config_dbg_line()
1422 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_dword_enable_reg_addr), in qed_bus_config_dbg_line()
1424 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_shift_reg_addr), in qed_bus_config_dbg_line()
1426 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_force_valid_reg_addr), in qed_bus_config_dbg_line()
1428 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_force_frame_reg_addr), in qed_bus_config_dbg_line()
1436 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_bus_disable_blocks()
1445 if (GET_FIELD(block_per_chip->flags, in qed_bus_disable_blocks()
1447 dev_data->block_in_reset[block_id]) in qed_bus_disable_blocks()
1451 if (GET_FIELD(block_per_chip->flags, in qed_bus_disable_blocks()
1454 block_per_chip->dbg_dword_enable_reg_addr; in qed_bus_disable_blocks()
1456 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_bus_disable_blocks()
1459 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_bus_disable_blocks()
1515 if (block->associated_storm_letter) { in qed_grc_is_mem_included()
1517 qed_get_id_from_letter(block->associated_storm_letter); in qed_grc_is_mem_included()
1527 if (mem_group_id == big_ram->mem_group_id || in qed_grc_is_mem_included()
1528 mem_group_id == big_ram->ram_mem_group_id) in qed_grc_is_mem_included()
1529 return qed_grc_is_included(p_hwfn, big_ram->grc_param); in qed_grc_is_mem_included()
1606 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_unreset_blocks()
1607 u8 chip_id = dev_data->chip_id; in qed_grc_unreset_blocks()
1612 if (s_rbc_reset_defs[i].reset_val[dev_data->chip_id]) in qed_grc_unreset_blocks()
1633 GET_FIELD(block->flags, DBG_BLOCK_CHIP_IS_REMOVED); in qed_grc_unreset_blocks()
1635 GET_FIELD(block->flags, in qed_grc_unreset_blocks()
1638 GET_FIELD(block->flags, in qed_grc_unreset_blocks()
1642 reg_val[block->reset_reg_id] |= in qed_grc_unreset_blocks()
1643 BIT(block->reset_reg_bit_offset); in qed_grc_unreset_blocks()
1655 (reset_reg->data, DBG_RESET_REG_IS_REMOVED)) in qed_grc_unreset_blocks()
1660 GET_FIELD(reset_reg->data, in qed_grc_unreset_blocks()
1679 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr; in qed_get_block_attn_data()
1693 *num_attn_regs = block_type_data->num_regs; in qed_get_block_attn_regs()
1696 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr + in qed_get_block_attn_regs()
1697 block_type_data->regs_offset; in qed_get_block_attn_regs()
1704 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_clear_all_prty()
1710 if (dev_data->block_in_reset[block_id]) in qed_grc_clear_all_prty()
1725 eval_mode = GET_FIELD(reg_data->mode.data, in qed_grc_clear_all_prty()
1728 GET_FIELD(reg_data->mode.data, in qed_grc_clear_all_prty()
1735 DWORDS_TO_BYTES(reg_data-> in qed_grc_clear_all_prty()
1743 * - count: no. of dumped entries
1744 * - split_type: split type
1745 * - split_id: split ID (dumped only if split_id != SPLIT_TYPE_NONE)
1746 * - reg_type_name: register type name (dumped only if reg_type_name != NULL)
1798 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_addr_range()
1814 port_id = split_id / dev_data->num_pfs_per_port; in qed_grc_dump_addr_range()
1815 pf_id = port_id + dev_data->num_ports * in qed_grc_dump_addr_range()
1816 (split_id % dev_data->num_pfs_per_port); in qed_grc_dump_addr_range()
1826 if (dev_data->use_dmae && split_type != SPLIT_TYPE_VF && in qed_grc_dump_addr_range()
1827 (len >= s_hw_type_defs[dev_data->hw_type].dmae_thresh || in qed_grc_dump_addr_range()
1864 dev_data->use_dmae = 0; in qed_grc_dump_addr_range()
1877 if (split_type != dev_data->pretend.split_type || in qed_grc_dump_addr_range()
1878 split_id != dev_data->pretend.split_id) { in qed_grc_dump_addr_range()
1903 dev_data->pretend.split_type = (u8)split_type; in qed_grc_dump_addr_range()
1904 dev_data->pretend.split_id = split_id; in qed_grc_dump_addr_range()
1912 dev_data->num_regs_read += len; in qed_grc_dump_addr_range()
1913 thresh = s_hw_type_defs[dev_data->hw_type].log_thresh; in qed_grc_dump_addr_range()
1914 if ((dev_data->num_regs_read / thresh) > in qed_grc_dump_addr_range()
1915 ((dev_data->num_regs_read - len) / thresh)) in qed_grc_dump_addr_range()
1918 "Dumped %d registers...\n", dev_data->num_regs_read); in qed_grc_dump_addr_range()
1958 * - addr: start GRC address in dwords
1959 * - total_len: total no. of dwords to dump
1960 * - read_len: no. consecutive dwords to read
1961 * - skip_len: no. of dwords to skip (and fill with zeros)
1979 u32 curr_len = min_t(u32, read_len, total_len - reg_offset); in qed_grc_dump_reg_entry_skip()
1990 curr_len = min_t(u32, skip_len, total_len - skip_len); in qed_grc_dump_reg_entry_skip()
2025 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_regs_entries()
2029 GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_regs_entries()
2035 if (!mode_match || !block_enable[cond_hdr->block_id]) { in qed_grc_dump_regs_entries()
2036 input_offset += cond_hdr->data_size; in qed_grc_dump_regs_entries()
2040 for (i = 0; i < cond_hdr->data_size; i++, input_offset++) { in qed_grc_dump_regs_entries()
2041 const struct dbg_dump_reg *reg = in qed_grc_dump_regs_entries() local
2047 addr = GET_FIELD(reg->data, DBG_DUMP_REG_ADDRESS); in qed_grc_dump_regs_entries()
2048 len = GET_FIELD(reg->data, DBG_DUMP_REG_LENGTH); in qed_grc_dump_regs_entries()
2049 wide_bus = GET_FIELD(reg->data, DBG_DUMP_REG_WIDE_BUS); in qed_grc_dump_regs_entries()
2075 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_split_data()
2083 hdr_split_id = split_id / dev_data->num_pfs_per_port; in qed_grc_dump_split_data()
2126 &p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG]; in qed_grc_dump_registers()
2127 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_registers()
2130 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_grc_dump_registers()
2140 dbg_buf->ptr + input_offset++; in qed_grc_dump_registers()
2142 GET_FIELD(split_hdr->hdr, in qed_grc_dump_registers()
2144 split_data_size = GET_FIELD(split_hdr->hdr, in qed_grc_dump_registers()
2147 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG].ptr + in qed_grc_dump_registers()
2156 split_count = dev_data->num_ports; in qed_grc_dump_registers()
2160 split_count = dev_data->num_ports * in qed_grc_dump_registers()
2161 dev_data->num_pfs_per_port; in qed_grc_dump_registers()
2164 split_count = dev_data->num_vfs; in qed_grc_dump_registers()
2186 p_hwfn->rel_pf_id)); in qed_grc_dump_registers()
2187 dev_data->pretend.split_type = SPLIT_TYPE_NONE; in qed_grc_dump_registers()
2188 dev_data->pretend.split_id = 0; in qed_grc_dump_registers()
2215 if (GET_FIELD(reset_reg->data, DBG_RESET_REG_IS_REMOVED)) in qed_grc_dump_reset_regs()
2218 reset_reg_addr = GET_FIELD(reset_reg->data, DBG_RESET_REG_ADDR); in qed_grc_dump_reset_regs()
2244 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_modified_regs()
2257 if (dev_data->block_in_reset[block_id] && dump) in qed_grc_dump_modified_regs()
2273 eval_mode = GET_FIELD(reg_data->mode.data, in qed_grc_dump_modified_regs()
2276 GET_FIELD(reg_data->mode.data, in qed_grc_dump_modified_regs()
2283 addr = reg_data->mask_address; in qed_grc_dump_modified_regs()
2291 addr = GET_FIELD(reg_data->data, in qed_grc_dump_modified_regs()
2322 if (dev_data->block_in_reset[storm->sem_block_id] && dump) in qed_grc_dump_modified_regs()
2326 BYTES_TO_DWORDS(storm->sem_fast_mem_addr + in qed_grc_dump_modified_regs()
2386 * - name: dumped only if it's not NULL.
2387 * - addr: in dwords, dumped only if name is NULL.
2388 * - len: in dwords, always dumped.
2389 * - width: dumped if it's not zero.
2390 * - packed: dumped only if it's not false.
2391 * - mem_group: always dumped.
2392 * - is_storm: true only if the memory is related to a Storm.
2393 * - storm_letter: valid only if is_storm is true.
2412 "Unexpected GRC Dump error: dumped memory size must be non-zero\n"); in qed_grc_dump_mem_hdr()
2456 /* Dump reg type */ in qed_grc_dump_mem_hdr()
2523 num_entries = cond_hdr->data_size / MEM_DUMP_ENTRY_SIZE_DWORDS; in qed_grc_dump_mem_entries()
2526 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_mem_entries()
2530 GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_mem_entries()
2537 input_offset += cond_hdr->data_size; in qed_grc_dump_mem_entries()
2553 mem_group_id = GET_FIELD(mem->dword0, in qed_grc_dump_mem_entries()
2562 cond_hdr->block_id, in qed_grc_dump_mem_entries()
2566 mem_addr = GET_FIELD(mem->dword0, DBG_DUMP_MEM_ADDRESS); in qed_grc_dump_mem_entries()
2567 mem_len = GET_FIELD(mem->dword1, DBG_DUMP_MEM_LENGTH); in qed_grc_dump_mem_entries()
2568 mem_wide_bus = GET_FIELD(mem->dword1, in qed_grc_dump_mem_entries()
2572 cond_hdr->block_id); in qed_grc_dump_mem_entries()
2577 if (block->associated_storm_letter) in qed_grc_dump_mem_entries()
2578 storm_letter = block->associated_storm_letter; in qed_grc_dump_mem_entries()
2607 &p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_MEM]; in qed_grc_dump_memories()
2610 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_grc_dump_memories()
2617 (const struct dbg_dump_split_hdr *)dbg_buf->ptr + in qed_grc_dump_memories()
2619 split_type = GET_FIELD(split_hdr->hdr, in qed_grc_dump_memories()
2621 split_data_size = GET_FIELD(split_hdr->hdr, in qed_grc_dump_memories()
2623 curr_input_mems_arr.ptr = (u32 *)dbg_buf->ptr + input_offset; in qed_grc_dump_memories()
2644 * The lid_size argument is specified in quad-regs.
2654 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_ctx_data()
2659 /* Convert quad-regs to dwords */ in qed_grc_dump_ctx_data()
2660 lid_size = storm->cm_ctx_lid_sizes[dev_data->chip_id][ctx_type] * 4; in qed_grc_dump_ctx_data()
2674 false, name, storm->letter); in qed_grc_dump_ctx_data()
2679 rd_reg_addr = BYTES_TO_DWORDS(storm->cm_ctx_rd_addr[ctx_type]); in qed_grc_dump_ctx_data()
2685 p_ptt, storm->cm_ctx_wr_addr, (i << 9) | lid); in qed_grc_dump_ctx_data()
2771 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_read_from_vfc()
2776 sem_base = storm->sem_fast_mem_addr; in qed_grc_dump_read_from_vfc()
2778 s_hw_type_defs[dev_data->hw_type].delay_factor; in qed_grc_dump_read_from_vfc()
2844 false, "vfc_cam", storm->letter); in qed_grc_dump_vfc_cam()
2876 u32 total_size = ram_defs->num_rows * VFC_RAM_RESP_DWORDS; in qed_grc_dump_vfc_ram()
2885 ram_defs->mem_name, in qed_grc_dump_vfc_ram()
2890 ram_defs->type_name, in qed_grc_dump_vfc_ram()
2891 storm->letter); in qed_grc_dump_vfc_ram()
2900 for (row = ram_defs->base_row; in qed_grc_dump_vfc_ram()
2901 row < ram_defs->base_row + ram_defs->num_rows; row++) { in qed_grc_dump_vfc_ram()
2953 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_rss()
2964 rss_addr = rss_defs->addr; in qed_grc_dump_rss()
2965 num_entries = rss_defs->num_entries[dev_data->chip_id]; in qed_grc_dump_rss()
2966 total_dwords = (num_entries * rss_defs->entry_width) / 32; in qed_grc_dump_rss()
2967 packed = (rss_defs->entry_width == 16); in qed_grc_dump_rss()
2972 rss_defs->mem_name, in qed_grc_dump_rss()
2975 rss_defs->entry_width, in qed_grc_dump_rss()
2977 rss_defs->type_name, 0); in qed_grc_dump_rss()
2999 total_dwords -= num_dwords_to_read; in qed_grc_dump_rss()
3012 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_big_ram()
3019 ram_size = big_ram->ram_size[dev_data->chip_id]; in qed_grc_dump_big_ram()
3021 reg_val = qed_rd(p_hwfn, p_ptt, big_ram->is_256b_reg_addr); in qed_grc_dump_big_ram()
3023 BIT(big_ram->is_256b_bit_offset[dev_data->chip_id]) ? 256 in qed_grc_dump_big_ram()
3026 strncpy(type_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3027 strncpy(mem_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3048 qed_wr(p_hwfn, p_ptt, big_ram->addr_reg_addr, i); in qed_grc_dump_big_ram()
3049 addr = BYTES_TO_DWORDS(big_ram->data_reg_addr); in qed_grc_dump_big_ram()
3105 /* Dump required non-MCP registers */ in qed_grc_dump_mcp()
3141 addr_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3142 phy_defs->tbus_addr_lo_addr; in qed_grc_dump_phy()
3143 addr_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3144 phy_defs->tbus_addr_hi_addr; in qed_grc_dump_phy()
3145 data_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3146 phy_defs->tbus_data_lo_addr; in qed_grc_dump_phy()
3147 data_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3148 phy_defs->tbus_data_hi_addr; in qed_grc_dump_phy()
3151 phy_defs->phy_name) < 0) in qed_grc_dump_phy()
3251 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_static_debug()
3281 is_removed = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3283 has_dbg_bus = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3291 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3294 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3311 block->name, in qed_grc_dump_static_debug()
3321 /* If all lines are invalid - dump zeros */ in qed_grc_dump_static_debug()
3322 if (dev_data->block_in_reset[block_id]) { in qed_grc_dump_static_debug()
3332 BIT(block_per_chip->dbg_client_id)); in qed_grc_dump_static_debug()
3377 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump()
3383 dev_data->num_regs_read = 0; in qed_grc_dump()
3394 dump, "dump-type", "grc-dump"); in qed_grc_dump()
3397 "num-lcids", in qed_grc_dump()
3401 "num-ltids", in qed_grc_dump()
3404 dump, "num-ports", dev_data->num_ports); in qed_grc_dump()
3502 DBG_GRC_PARAM_DUMP_PHY) && dev_data->chip_id == in qed_grc_dump()
3503 CHIP_K2 && dev_data->hw_type == HW_TYPE_ASIC) in qed_grc_dump()
3517 (!dump || dev_data->bus.state == DBG_BUS_STATE_IDLE)) in qed_grc_dump()
3555 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_failure()
3565 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_failure()
3566 rule->reg_offset; in qed_idle_chk_dump_failure()
3568 info_regs = ®s[rule->num_cond_regs].info_reg; in qed_idle_chk_dump_failure()
3573 hdr->rule_id = rule_id; in qed_idle_chk_dump_failure()
3574 hdr->mem_entry_id = fail_entry_id; in qed_idle_chk_dump_failure()
3575 hdr->severity = rule->severity; in qed_idle_chk_dump_failure()
3576 hdr->num_dumped_cond_regs = rule->num_cond_regs; in qed_idle_chk_dump_failure()
3582 for (reg_id = 0; reg_id < rule->num_cond_regs; reg_id++) { in qed_idle_chk_dump_failure()
3583 const struct dbg_idle_chk_cond_reg *reg = &cond_regs[reg_id]; in qed_idle_chk_dump_failure() local
3592 reg->entry_size; in qed_idle_chk_dump_failure()
3598 reg_hdr->start_entry = reg->start_entry; in qed_idle_chk_dump_failure()
3599 reg_hdr->size = reg->entry_size; in qed_idle_chk_dump_failure()
3600 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3602 reg->num_entries > 1 || reg->start_entry > 0 ? 1 : 0); in qed_idle_chk_dump_failure()
3603 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3607 for (i = 0; i < reg_hdr->size; i++, next_reg_offset++, offset++) in qed_idle_chk_dump_failure()
3612 for (reg_id = 0; reg_id < rule->num_info_regs; reg_id++) { in qed_idle_chk_dump_failure()
3613 const struct dbg_idle_chk_info_reg *reg = &info_regs[reg_id]; in qed_idle_chk_dump_failure() local
3618 offset += IDLE_CHK_RESULT_REG_HDR_DWORDS + reg->size; in qed_idle_chk_dump_failure()
3622 block_id = GET_FIELD(reg->data, DBG_IDLE_CHK_INFO_REG_BLOCK_ID); in qed_idle_chk_dump_failure()
3628 if (!dev_data->block_in_reset[block_id]) { in qed_idle_chk_dump_failure()
3638 eval_mode = GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3642 GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3652 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3654 wide_bus = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3659 hdr->num_dumped_info_regs++; in qed_idle_chk_dump_failure()
3661 reg_hdr->size = reg->size; in qed_idle_chk_dump_failure()
3662 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3664 rule->num_cond_regs + reg_id); in qed_idle_chk_dump_failure()
3672 reg->size, wide_bus, in qed_idle_chk_dump_failure()
3687 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_rule_entries()
3705 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_rule_entries()
3706 rule->reg_offset; in qed_idle_chk_dump_rule_entries()
3709 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr + in qed_idle_chk_dump_rule_entries()
3710 rule->imm_offset; in qed_idle_chk_dump_rule_entries()
3716 for (reg_id = 0; reg_id < rule->num_cond_regs && check_rule; in qed_idle_chk_dump_rule_entries()
3727 check_rule = !dev_data->block_in_reset[block_id]; in qed_idle_chk_dump_rule_entries()
3741 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3758 for (reg_id = 0; reg_id < rule->num_cond_regs; in qed_idle_chk_dump_rule_entries()
3760 const struct dbg_idle_chk_cond_reg *reg = in qed_idle_chk_dump_rule_entries() local
3768 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3771 GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3773 if (reg->num_entries > 1 || in qed_idle_chk_dump_rule_entries()
3774 reg->start_entry > 0) { in qed_idle_chk_dump_rule_entries()
3776 reg->entry_size > 1 ? in qed_idle_chk_dump_rule_entries()
3777 roundup_pow_of_two(reg->entry_size) : in qed_idle_chk_dump_rule_entries()
3779 addr += (reg->start_entry + entry_id) * in qed_idle_chk_dump_rule_entries()
3784 if (next_reg_offset + reg->entry_size >= in qed_idle_chk_dump_rule_entries()
3796 reg->entry_size, in qed_idle_chk_dump_rule_entries()
3804 if ((*cond_arr[rule->cond_id]) (cond_reg_values, in qed_idle_chk_dump_rule_entries()
3810 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3829 &p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES]; in qed_idle_chk_dump()
3833 /* Dump global params - 1 must match below amount of params */ in qed_idle_chk_dump()
3838 dump, "dump-type", "idle-chk"); in qed_idle_chk_dump()
3845 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_idle_chk_dump()
3847 (const struct dbg_idle_chk_cond_hdr *)dbg_buf->ptr + in qed_idle_chk_dump()
3854 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
3858 GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
3867 dbg_buf->ptr in qed_idle_chk_dump()
3870 cond_hdr->data_size / IDLE_CHK_RULE_SIZE_DWORDS; in qed_idle_chk_dump()
3883 input_offset += cond_hdr->data_size; in qed_idle_chk_dump()
3976 bytes_left -= ret_read_size; in qed_nvram_read()
3983 * - trace_data_grc_addr (OUT): trace data GRC address in bytes
3984 * - trace_data_size (OUT): trace data size in bytes (without the header)
4018 * - running_bundle_id (OUT): running bundle ID (invalid when loaded from file)
4019 * - trace_meta_offset (OUT): trace meta offset in NVRAM in bytes (invalid when
4021 * - trace_meta_size (OUT): size in bytes of the trace meta data.
4124 dump, "dump-type", "mcp-trace"); in qed_mcp_trace_dump()
4166 * trace_meta_size_bytes is dword-aligned. in qed_mcp_trace_dump()
4221 dump, "dump-type", "reg-fifo"); in qed_reg_fifo_dump()
4291 dump, "dump-type", "igu-fifo"); in qed_igu_fifo_dump()
4361 dump, "dump-type", "protection-override"); in qed_protection_override_dump()
4407 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_fw_asserts_dump()
4419 dump, "dump-type", "fw-asserts"); in qed_fw_asserts_dump()
4427 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_fw_asserts_dump()
4436 storm_letter_str[0] = storm->letter; in qed_fw_asserts_dump()
4444 asserts->list_element_dword_size); in qed_fw_asserts_dump()
4448 offset += asserts->list_element_dword_size; in qed_fw_asserts_dump()
4452 addr = le16_to_cpu(asserts->section_ram_line_offset); in qed_fw_asserts_dump()
4453 fw_asserts_section_addr = storm->sem_fast_mem_addr + in qed_fw_asserts_dump()
4458 DWORDS_TO_BYTES(asserts->list_next_index_dword_offset); in qed_fw_asserts_dump()
4462 asserts->list_num_elements) - 1; in qed_fw_asserts_dump()
4464 asserts->list_dword_offset + in qed_fw_asserts_dump()
4465 last_list_idx * asserts->list_element_dword_size; in qed_fw_asserts_dump()
4470 asserts->list_element_dword_size, in qed_fw_asserts_dump()
4495 end_page_id = start_page_id + num_pages - 1; in qed_ilt_dump_pages_range()
4502 * if (page_id >= ->p_cxt_mngr->ilt_shadow_size) in qed_ilt_dump_pages_range()
4518 mem_desc->virt_addr, mem_desc->size); in qed_ilt_dump_pages_range()
4519 offset += BYTES_TO_DWORDS(mem_desc->size); in qed_ilt_dump_pages_range()
4537 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump_pages_section()
4553 pf_start_line = p_hwfn->p_cxt_mngr->pf_start_line; in qed_ilt_dump_pages_section()
4564 * - PF pages - valid section (included in PF connection type mapping) in qed_ilt_dump_pages_section()
4565 * - PF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4566 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4567 * - VF pages - valid section (included in VF connection type mapping) in qed_ilt_dump_pages_section()
4568 * - VF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4572 start_page_id = clients[ILT_CLI_CDUC].first.val - pf_start_line; in qed_ilt_dump_pages_section()
4581 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4592 * - PF init pages (not dumped) in qed_ilt_dump_pages_section()
4593 * - PF work pages in qed_ilt_dump_pages_section()
4594 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4595 * - VF init pages (not dumped) in qed_ilt_dump_pages_section()
4596 * - VF work pages in qed_ilt_dump_pages_section()
4601 cdut_pf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4610 cdut_pf_pages + cdut_vf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4611 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4624 dump, "size", offset - base_data_offset); in qed_ilt_dump_pages_section()
4635 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump()
4647 conn_ctx_size = p_hwfn->p_cxt_mngr->conn_ctx_size; in qed_ilt_dump()
4649 ilt_pages = p_hwfn->p_cxt_mngr->ilt_shadow; in qed_ilt_dump()
4651 /* Dump global params - 22 must match number of params below */ in qed_ilt_dump()
4655 dump, "dump-type", "ilt-dump"); in qed_ilt_dump()
4658 "cduc-page-size", cduc_page_size); in qed_ilt_dump()
4661 "cduc-first-page-id", in qed_ilt_dump()
4665 "cduc-last-page-id", in qed_ilt_dump()
4669 "cduc-num-pf-pages", in qed_ilt_dump()
4674 "cduc-num-vf-pages", in qed_ilt_dump()
4679 "max-conn-ctx-size", in qed_ilt_dump()
4683 "cdut-page-size", cdut_page_size); in qed_ilt_dump()
4686 "cdut-first-page-id", in qed_ilt_dump()
4690 "cdut-last-page-id", in qed_ilt_dump()
4694 "cdut-num-pf-init-pages", in qed_ilt_dump()
4698 "cdut-num-vf-init-pages", in qed_ilt_dump()
4702 "cdut-num-pf-work-pages", in qed_ilt_dump()
4706 "cdut-num-vf-work-pages", in qed_ilt_dump()
4710 "max-task-ctx-size", in qed_ilt_dump()
4711 p_hwfn->p_cxt_mngr->task_ctx_size); in qed_ilt_dump()
4714 "task-type-id", in qed_ilt_dump()
4715 p_hwfn->p_cxt_mngr->task_type_id); in qed_ilt_dump()
4718 "first-vf-id-in-pf", in qed_ilt_dump()
4719 p_hwfn->p_cxt_mngr->first_vf_in_pf); in qed_ilt_dump()
4722 "num-vfs-in-pf", in qed_ilt_dump()
4723 p_hwfn->p_cxt_mngr->vf_count); in qed_ilt_dump()
4726 "ptr-size-bytes", sizeof(void *)); in qed_ilt_dump()
4729 "pf-start-line", in qed_ilt_dump()
4730 p_hwfn->p_cxt_mngr->pf_start_line); in qed_ilt_dump()
4733 "page-mem-desc-size-dwords", in qed_ilt_dump()
4737 "ilt-shadow-size", in qed_ilt_dump()
4738 p_hwfn->p_cxt_mngr->ilt_shadow_size); in qed_ilt_dump()
4751 p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cid_count; in qed_ilt_dump()
4766 p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cids_per_vf; in qed_ilt_dump()
4774 num_pages = p_hwfn->p_cxt_mngr->ilt_shadow_size; in qed_ilt_dump()
4843 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_read_fw_info()
4850 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_read_fw_info()
4865 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_config()
4902 if (defs->is_persistent) in qed_dbg_grc_config()
4908 defs->exclude_all_preset_val; in qed_dbg_grc_config()
4911 defs->crash_preset_val[dev_data->chip_id]; in qed_dbg_grc_config()
4918 /* Regular param - set its value */ in qed_dbg_grc_config()
4928 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_set_params_default()
4933 dev_data->grc.param_val[i] = in qed_dbg_grc_set_params_default()
4934 s_grc_param_defs[i].default_val[dev_data->chip_id]; in qed_dbg_grc_set_params_default()
4948 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_grc_get_dump_buf_size()
4949 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG].ptr || in qed_dbg_grc_get_dump_buf_size()
4950 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_MEM].ptr || in qed_dbg_grc_get_dump_buf_size()
4951 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_grc_get_dump_buf_size()
4952 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_grc_get_dump_buf_size()
4991 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_idle_chk_get_dump_buf_size()
4992 struct idle_chk_data *idle_chk = &dev_data->idle_chk; in qed_dbg_idle_chk_get_dump_buf_size()
5001 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5002 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5003 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5004 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES].ptr) in qed_dbg_idle_chk_get_dump_buf_size()
5007 if (!idle_chk->buf_size_set) { in qed_dbg_idle_chk_get_dump_buf_size()
5008 idle_chk->buf_size = qed_idle_chk_dump(p_hwfn, in qed_dbg_idle_chk_get_dump_buf_size()
5010 idle_chk->buf_size_set = true; in qed_dbg_idle_chk_get_dump_buf_size()
5013 *buf_size = idle_chk->buf_size; in qed_dbg_idle_chk_get_dump_buf_size()
5346 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_read_attn()
5347 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_read_attn()
5348 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_read_attn()
5363 eval_mode = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5365 modes_buf_offset = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5370 /* Mode match - read attention status register */ in qed_dbg_read_attn()
5372 reg_data->sts_clr_address : in qed_dbg_read_attn()
5373 GET_FIELD(reg_data->data, in qed_dbg_read_attn()
5379 /* Non-zero attention status - add to results */ in qed_dbg_read_attn()
5380 reg_result = &results->reg_results[num_result_regs]; in qed_dbg_read_attn()
5381 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5383 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5385 GET_FIELD(reg_data->data, DBG_ATTN_REG_NUM_REG_ATTN)); in qed_dbg_read_attn()
5386 reg_result->block_attn_offset = reg_data->block_attn_offset; in qed_dbg_read_attn()
5387 reg_result->sts_val = sts_val; in qed_dbg_read_attn()
5388 reg_result->mask_val = qed_rd(p_hwfn, in qed_dbg_read_attn()
5391 (reg_data->mask_address)); in qed_dbg_read_attn()
5395 results->block_id = (u8)block_id; in qed_dbg_read_attn()
5396 results->names_offset = in qed_dbg_read_attn()
5397 qed_get_block_attn_data(p_hwfn, block_id, attn_type)->names_offset; in qed_dbg_read_attn()
5398 SET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE, attn_type); in qed_dbg_read_attn()
5399 SET_FIELD(results->data, in qed_dbg_read_attn()
5407 /* REG fifo element */
5430 /* REG fifo error element */
5542 (MCP_TRACE_FORMAT_P2_SIZE_OFFSET - MCP_TRACE_FORMAT_P1_SIZE_OFFSET)
5604 "Filters and triggers are not allowed in E4 256-bit mode",
5658 "NVRAM image is not dword-aligned",
5670 "Dump doesn't contain meta data - it must be provided in image file",
5706 "Non-matching debug lines - in E4, all lines must be of the same type (either 128b or 256b)",
5730 /* Idle check severity names array */
5737 /* MCP Trace level names array */
5744 /* Access type names array */
5750 /* Privilege type names array */
5758 /* Protection type names array */
5770 /* Master type names array */
5790 /* REG FIFO error messages array */
5794 {4, "reserved address in block or write to read-only address"},
5836 {0x0, 0x101, "MSI-X Memory", NULL,
5884 return (size + a - b) % size; in qed_cyclic_sub()
5939 dest[size - 1] = '\0'; in qed_read_str_from_buf()
5974 offset += (4 - (offset & 0x3)); in qed_read_param()
5979 offset += (4 - (offset & 0x3)); in qed_read_param()
6022 else if (strcmp(param_name, "fw-timestamp")) in qed_print_section_params()
6045 p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS_USER_DATA].ptr + block_id; in qed_dbg_get_block_name()
6047 return (const char *)block->name; in qed_dbg_get_block_name()
6053 return (struct dbg_tools_user_data *)p_hwfn->dbg_user_info; in qed_dbg_get_user_data()
6089 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr + in qed_parse_idle_chk_dump_rules()
6090 hdr->rule_id; in qed_parse_idle_chk_dump_rules()
6092 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6095 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6098 p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr + in qed_parse_idle_chk_dump_rules()
6103 if (hdr->severity >= MAX_DBG_IDLE_CHK_SEVERITY_TYPES) in qed_parse_idle_chk_dump_rules()
6110 if (hdr->severity == IDLE_CHK_SEVERITY_ERROR || in qed_parse_idle_chk_dump_rules()
6111 hdr->severity == IDLE_CHK_SEVERITY_ERROR_NO_TRAFFIC) in qed_parse_idle_chk_dump_rules()
6120 s_idle_chk_severity_str[hdr->severity]); in qed_parse_idle_chk_dump_rules()
6137 i < hdr->num_dumped_cond_regs + hdr->num_dumped_info_regs; in qed_parse_idle_chk_dump_rules()
6145 is_mem = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6147 reg_id = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6150 /* Skip reg header */ in qed_parse_idle_chk_dump_rules()
6153 /* Skip register names until the required reg_id is in qed_parse_idle_chk_dump_rules()
6164 if (i < hdr->num_dumped_cond_regs && is_mem) in qed_parse_idle_chk_dump_rules()
6168 "[%d]", hdr->mem_entry_id + in qed_parse_idle_chk_dump_rules()
6169 reg_hdr->start_entry); in qed_parse_idle_chk_dump_rules()
6173 for (j = 0; j < reg_hdr->size; j++, dump_buf++) { in qed_parse_idle_chk_dump_rules()
6178 if (j < reg_hdr->size - 1) in qed_parse_idle_chk_dump_rules()
6222 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr || in qed_parse_idle_chk_dump()
6223 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr) in qed_parse_idle_chk_dump()
6332 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_alloc_meta_data()
6336 if (meta->is_allocated) in qed_mcp_trace_alloc_meta_data()
6347 meta->modules_num = qed_read_byte_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6348 meta->modules = kcalloc(meta->modules_num, sizeof(char *), in qed_mcp_trace_alloc_meta_data()
6350 if (!meta->modules) in qed_mcp_trace_alloc_meta_data()
6354 for (i = 0; i < meta->modules_num; i++) { in qed_mcp_trace_alloc_meta_data()
6357 *(meta->modules + i) = kzalloc(module_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6358 if (!(*(meta->modules + i))) { in qed_mcp_trace_alloc_meta_data()
6360 meta->modules_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6365 *(meta->modules + i)); in qed_mcp_trace_alloc_meta_data()
6367 (*(meta->modules + i))[MCP_TRACE_MAX_MODULE_LEN] = '\0'; in qed_mcp_trace_alloc_meta_data()
6376 meta->formats_num = qed_read_dword_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6377 meta->formats = kcalloc(meta->formats_num, in qed_mcp_trace_alloc_meta_data()
6380 if (!meta->formats) in qed_mcp_trace_alloc_meta_data()
6384 for (i = 0; i < meta->formats_num; i++) { in qed_mcp_trace_alloc_meta_data()
6385 struct mcp_trace_format *format_ptr = &meta->formats[i]; in qed_mcp_trace_alloc_meta_data()
6388 format_ptr->data = qed_read_dword_from_buf(meta_buf_bytes, in qed_mcp_trace_alloc_meta_data()
6390 format_len = GET_MFW_FIELD(format_ptr->data, in qed_mcp_trace_alloc_meta_data()
6392 format_ptr->format_str = kzalloc(format_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6393 if (!format_ptr->format_str) { in qed_mcp_trace_alloc_meta_data()
6395 meta->formats_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6401 format_len, format_ptr->format_str); in qed_mcp_trace_alloc_meta_data()
6404 meta->is_allocated = true; in qed_mcp_trace_alloc_meta_data()
6411 * trace_buf - MCP trace cyclic buffer
6412 * trace_buf_size - MCP trace cyclic buffer size in bytes
6413 * data_offset - offset in bytes of the data to parse in the MCP trace cyclic
6415 * data_size - size in bytes of data to parse.
6416 * parsed_buf - destination buffer for parsed data.
6417 * parsed_results_bytes - size of parsed data in bytes.
6433 meta = &dev_user_data->mcp_trace_meta; in qed_parse_mcp_trace_buf()
6436 if (!meta->is_allocated) in qed_parse_mcp_trace_buf()
6454 data_size -= MFW_TRACE_ENTRY_SIZE; in qed_parse_mcp_trace_buf()
6458 if (format_idx >= meta->formats_num) { in qed_parse_mcp_trace_buf()
6468 data_size -= format_size; in qed_parse_mcp_trace_buf()
6472 format_ptr = &meta->formats[format_idx]; in qed_parse_mcp_trace_buf()
6481 u8 param_size = (u8)((format_ptr->data & param_mask) >> in qed_parse_mcp_trace_buf()
6503 data_size -= param_size; in qed_parse_mcp_trace_buf()
6506 format_level = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6508 format_module = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6517 "%s %-8s: ", in qed_parse_mcp_trace_buf()
6519 meta->modules[format_module]); in qed_parse_mcp_trace_buf()
6522 format_ptr->format_str, in qed_parse_mcp_trace_buf()
6579 if (trace->signature != MFW_TRACE_SIGNATURE || !trace->size) in qed_parse_mcp_trace_dump()
6583 offset = trace->trace_oldest; in qed_parse_mcp_trace_dump()
6584 data_size = qed_cyclic_sub(trace->trace_prod, offset, trace->size); in qed_parse_mcp_trace_dump()
6604 if (!dev_user_data->mcp_trace_user_meta_buf) in qed_parse_mcp_trace_dump()
6607 meta_buf = dev_user_data->mcp_trace_user_meta_buf; in qed_parse_mcp_trace_dump()
6620 trace->size, in qed_parse_mcp_trace_dump()
6638 /* Parses a Reg FIFO dump buffer.
6639 * If result_buf is not NULL, the Reg FIFO results are printed to it.
6701 …0x%016llx, address: 0x%07x, access: %-5s, pf: %2d, vf: %s, port: %d, privilege: %-3s, protection: … in qed_parse_reg_fifo_dump()
6749 dword12 = ((u64)element->dword2 << 32) | element->dword1; in qed_parse_igu_fifo_element()
6751 is_pf = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_IS_PF); in qed_parse_igu_fifo_element()
6752 cmd_addr = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_CMD_ADDR); in qed_parse_igu_fifo_element()
6753 source = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_SOURCE); in qed_parse_igu_fifo_element()
6754 err_type = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_ERR_TYPE); in qed_parse_igu_fifo_element()
6766 if (cmd_addr >= curr_addr->start_addr && cmd_addr <= in qed_parse_igu_fifo_element()
6767 curr_addr->end_addr) in qed_parse_igu_fifo_element()
6775 switch (found_addr->type) { in qed_parse_igu_fifo_element()
6782 " SB = 0x%x", cmd_addr - found_addr->start_addr); in qed_parse_igu_fifo_element()
6845 element->dword2, element->dword1, in qed_parse_igu_fifo_element()
6846 element->dword0, in qed_parse_igu_fifo_element()
6848 GET_FIELD(element->dword0, in qed_parse_igu_fifo_element()
6853 (!is_pf && found_addr->vf_desc) in qed_parse_igu_fifo_element()
6854 ? found_addr->vf_desc in qed_parse_igu_fifo_element()
6855 : found_addr->desc, in qed_parse_igu_fifo_element()
6969 …s: 0x%07x, size: %7d regs, read: %d, write: %d, read protection: %-12s, write protection: %-12s\n", in qed_parse_protection_override_dump()
7144 dev_user_data->mcp_trace_user_meta_buf = meta_buf; in qed_dbg_mcp_trace_set_meta_data()
7201 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_free_meta_data()
7202 if (!meta->is_allocated) in qed_mcp_trace_free_meta_data()
7206 if (meta->modules) { in qed_mcp_trace_free_meta_data()
7207 for (i = 0; i < meta->modules_num; i++) in qed_mcp_trace_free_meta_data()
7208 kfree(meta->modules[i]); in qed_mcp_trace_free_meta_data()
7209 kfree(meta->modules); in qed_mcp_trace_free_meta_data()
7213 if (meta->formats) { in qed_mcp_trace_free_meta_data()
7214 for (i = 0; i < meta->formats_num; i++) in qed_mcp_trace_free_meta_data()
7215 kfree(meta->formats[i].format_str); in qed_mcp_trace_free_meta_data()
7216 kfree(meta->formats); in qed_mcp_trace_free_meta_data()
7219 meta->is_allocated = false; in qed_mcp_trace_free_meta_data()
7308 num_regs = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_NUM_REGS); in qed_dbg_parse_attn()
7309 attn_type = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE); in qed_dbg_parse_attn()
7310 block_name = qed_dbg_get_block_name(p_hwfn, results->block_id); in qed_dbg_parse_attn()
7314 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr || in qed_dbg_parse_attn()
7315 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr || in qed_dbg_parse_attn()
7316 !p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr) in qed_dbg_parse_attn()
7320 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr + in qed_dbg_parse_attn()
7321 results->names_offset; in qed_dbg_parse_attn()
7323 attn_name_base = p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr; in qed_dbg_parse_attn()
7325 /* Go over registers with a non-zero attention status */ in qed_dbg_parse_attn()
7331 reg_result = &results->reg_results[i]; in qed_dbg_parse_attn()
7332 num_reg_attn = GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7335 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr + in qed_dbg_parse_attn()
7336 reg_result->block_attn_offset; in qed_dbg_parse_attn()
7356 if (!(reg_result->sts_val & BIT(bit_idx))) in qed_dbg_parse_attn()
7369 masked_str = reg_result->mask_val & BIT(bit_idx) ? in qed_dbg_parse_attn()
7371 sts_addr = GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7468 &p_hwfn->cdev->dbg_features[feature_idx]; in format_feature()
7479 results_buf_size(p_hwfn, (u32 *)feature->dump_buf, in format_feature()
7480 feature->dumped_dwords, &text_size_bytes); in format_feature()
7485 null_char_pos = text_size_bytes - 1; in format_feature()
7489 DP_NOTICE(p_hwfn->cdev, in format_feature()
7502 print_results(p_hwfn, (u32 *)feature->dump_buf, in format_feature()
7503 feature->dumped_dwords, text_buf); in format_feature()
7517 if (p_hwfn->cdev->print_dbg_data) in format_feature()
7521 if (p_hwfn->cdev->dbg_bin_dump) { in format_feature()
7529 vfree(feature->dump_buf); in format_feature()
7530 feature->dump_buf = text_buf; in format_feature()
7531 feature->buf_size = text_size_bytes; in format_feature()
7532 feature->dumped_dwords = text_size_bytes / 4; in format_feature()
7544 &p_hwfn->cdev->dbg_features[feature_idx]; in qed_dbg_dump()
7548 DP_NOTICE(p_hwfn->cdev, "Collecting a debug feature [\"%s\"]\n", in qed_dbg_dump()
7555 if (feature->dump_buf) { in qed_dbg_dump()
7556 vfree(feature->dump_buf); in qed_dbg_dump()
7557 feature->dump_buf = NULL; in qed_dbg_dump()
7569 feature->buf_size = 0; in qed_dbg_dump()
7570 DP_NOTICE(p_hwfn->cdev, in qed_dbg_dump()
7578 feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_dump()
7579 feature->dump_buf = vmalloc(feature->buf_size); in qed_dbg_dump()
7580 if (!feature->dump_buf) in qed_dbg_dump()
7584 perform_dump(p_hwfn, p_ptt, (u32 *)feature->dump_buf, in qed_dbg_dump()
7585 feature->buf_size / sizeof(u32), in qed_dbg_dump()
7586 &feature->dumped_dwords); in qed_dbg_dump()
7669 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_nvm_image()
7678 DP_NOTICE(p_hwfn->cdev, in qed_dbg_nvm_image()
7802 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data()
7803 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_all_data()
7809 grc_params[i] = dev_data->grc.param_val[i]; in qed_dbg_all_data()
7815 cdev->dbg_bin_dump = true; in qed_dbg_all_data()
7818 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data()
7903 if (!cdev->disable_ilt_dump && in qed_dbg_all_data()
7920 /* GRC dump - must be last because when mcp stuck it will in qed_dbg_all_data()
7924 dev_data->grc.param_val[i] = grc_params[i]; in qed_dbg_all_data()
7953 /* Re-populate nvm attribute info */ in qed_dbg_all_data()
7967 } else if (rc != -ENOENT) { in qed_dbg_all_data()
7982 } else if (rc != -ENOENT) { in qed_dbg_all_data()
7998 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8013 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8019 cdev->dbg_bin_dump = false; in qed_dbg_all_data()
8028 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data_size()
8032 cdev->disable_ilt_dump = false; in qed_dbg_all_data_size()
8034 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data_size()
8076 cdev->disable_ilt_dump = true; in qed_dbg_all_data_size()
8077 regs_len -= total_ilt_len; in qed_dbg_all_data_size()
8087 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature()
8089 &cdev->dbg_features[feature]; in qed_dbg_feature()
8097 return -EINVAL; in qed_dbg_feature()
8105 rc = -EINVAL; in qed_dbg_feature()
8111 memcpy(buffer, qed_feature->dump_buf, qed_feature->buf_size); in qed_dbg_feature()
8112 *num_dumped_bytes = cdev->dbg_features[feature].dumped_dwords * in qed_dbg_feature()
8123 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature_size()
8124 struct qed_dbg_feature *qed_feature = &cdev->dbg_features[feature]; in qed_dbg_feature_size()
8130 return -EINVAL; in qed_dbg_feature_size()
8142 qed_feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_feature_size()
8143 return qed_feature->buf_size; in qed_dbg_feature_size()
8148 return cdev->engine_for_debug; in qed_get_debug_engine()
8155 cdev->engine_for_debug = engine_number; in qed_set_debug_engine()
8166 dbg_values = cdev->firmware->data + *(u32 *)cdev->firmware->data; in qed_dbg_pf_init()
8169 qed_dbg_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8170 qed_dbg_user_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8174 cdev->engine_for_debug = 0; in qed_dbg_pf_init()
8186 feature = &cdev->dbg_features[feature_idx]; in qed_dbg_pf_exit()
8187 if (feature->dump_buf) { in qed_dbg_pf_exit()
8188 vfree(feature->dump_buf); in qed_dbg_pf_exit()
8189 feature->dump_buf = NULL; in qed_dbg_pf_exit()