Lines Matching +full:quad +full:- +full:precision

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
4 * Copyright (c) 2019-2021 Marvell International Ltd.
157 return r[0] < (r[1] - imm[0]); in cond8()
235 /* Debug bus pre-trigger recording types */
242 /* Debug bus post-trigger recording types */
290 * Addresses are in bytes, sizes are in quad-regs.
398 (((1 << FIELD_BIT_SIZE(type, field)) - 1) << \
420 (GET_FIELD((block)->flags, DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS) ? 2 : 1)
422 ((block)->num_of_dbg_bus_lines + NUM_EXTRA_DBG_LINES(block))
913 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_set_param()
915 dev_data->grc.param_val[grc_param] = val; in qed_grc_set_param()
922 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_get_param()
924 return dev_data->grc.param_val[grc_param]; in qed_grc_get_param()
930 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_init_params()
932 if (!dev_data->grc.params_initialized) { in qed_dbg_grc_init_params()
934 dev_data->grc.params_initialized = 1; in qed_dbg_grc_init_params()
943 struct virt_mem_desc *buf = &p_hwfn->dbg_arrays[buf_type]; in qed_set_dbg_bin_buf()
945 buf->ptr = (void *)ptr; in qed_set_dbg_bin_buf()
946 buf->size = size; in qed_set_dbg_bin_buf()
952 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_dev_init()
955 if (dev_data->initialized) in qed_dbg_dev_init()
962 if (QED_IS_K2(p_hwfn->cdev)) { in qed_dbg_dev_init()
963 dev_data->chip_id = CHIP_K2; in qed_dbg_dev_init()
964 dev_data->mode_enable[MODE_K2] = 1; in qed_dbg_dev_init()
965 dev_data->num_vfs = MAX_NUM_VFS_K2; in qed_dbg_dev_init()
968 } else if (QED_IS_BB_B0(p_hwfn->cdev)) { in qed_dbg_dev_init()
969 dev_data->chip_id = CHIP_BB; in qed_dbg_dev_init()
970 dev_data->mode_enable[MODE_BB] = 1; in qed_dbg_dev_init()
971 dev_data->num_vfs = MAX_NUM_VFS_BB; in qed_dbg_dev_init()
979 dev_data->hw_type = HW_TYPE_ASIC; in qed_dbg_dev_init()
980 dev_data->mode_enable[MODE_ASIC] = 1; in qed_dbg_dev_init()
983 switch (p_hwfn->cdev->num_ports_in_engine) { in qed_dbg_dev_init()
985 dev_data->mode_enable[MODE_PORTS_PER_ENG_1] = 1; in qed_dbg_dev_init()
988 dev_data->mode_enable[MODE_PORTS_PER_ENG_2] = 1; in qed_dbg_dev_init()
991 dev_data->mode_enable[MODE_PORTS_PER_ENG_4] = 1; in qed_dbg_dev_init()
996 if (QED_IS_CMT(p_hwfn->cdev)) in qed_dbg_dev_init()
997 dev_data->mode_enable[MODE_100G] = 1; in qed_dbg_dev_init()
1000 if (dev_data->mode_enable[MODE_PORTS_PER_ENG_1] || in qed_dbg_dev_init()
1001 dev_data->mode_enable[MODE_100G]) in qed_dbg_dev_init()
1002 dev_data->num_ports = 1; in qed_dbg_dev_init()
1003 else if (dev_data->mode_enable[MODE_PORTS_PER_ENG_2]) in qed_dbg_dev_init()
1004 dev_data->num_ports = 2; in qed_dbg_dev_init()
1005 else if (dev_data->mode_enable[MODE_PORTS_PER_ENG_4]) in qed_dbg_dev_init()
1006 dev_data->num_ports = 4; in qed_dbg_dev_init()
1009 dev_data->num_pfs_per_port = min_t(u32, in qed_dbg_dev_init()
1010 num_pfs / dev_data->num_ports, in qed_dbg_dev_init()
1016 dev_data->use_dmae = true; in qed_dbg_dev_init()
1017 dev_data->initialized = 1; in qed_dbg_dev_init()
1027 dbg_block = p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS].ptr; in get_dbg_block()
1036 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_get_dbg_block_per_chip()
1039 p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS_CHIP_DATA].ptr + in qed_get_dbg_block_per_chip()
1040 block_id * MAX_CHIP_IDS + dev_data->chip_id; in qed_get_dbg_block_per_chip()
1047 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_get_dbg_reset_reg()
1050 p_hwfn->dbg_arrays[BIN_BUF_DBG_RESET_REGS].ptr + in qed_get_dbg_reset_reg()
1051 reset_reg_id * MAX_CHIP_IDS + dev_data->chip_id; in qed_get_dbg_reset_reg()
1071 addr = storm->sem_fast_mem_addr + SEM_FAST_REG_INT_RAM + in qed_read_storm_fw_info()
1072 DWORDS_TO_BYTES(SEM_FAST_REG_INT_RAM_SIZE) - in qed_read_storm_fw_info()
1113 align_size = offset_in_dword ? BYTES_IN_DWORD - offset_in_dword : 0; in qed_dump_align()
1218 dump, "fw-version", fw_ver_str); in qed_dump_fw_ver_param()
1220 dump, "fw-image", fw_img_str); in qed_dump_fw_ver_param()
1221 offset += qed_dump_num_param(dump_buf + offset, dump, "fw-timestamp", in qed_dump_fw_ver_param()
1273 return qed_dump_str_param(dump_buf, dump, "mfw-version", mfw_ver_str); in qed_dump_mfw_ver_param()
1283 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dump_chip_revision_param()
1286 if (dev_data->hw_type == HW_TYPE_ASIC) { in qed_dump_chip_revision_param()
1296 return qed_dump_str_param(dump_buf, dump, "chip-revision", param_str); in qed_dump_chip_revision_param()
1317 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dump_common_global_params()
1323 (dev_data->chip_id == CHIP_BB ? 1 : 0); in qed_dump_common_global_params()
1334 dump, "tools-version", TOOLS_VERSION); in qed_dump_common_global_params()
1338 s_chip_defs[dev_data->chip_id].name); in qed_dump_common_global_params()
1342 s_hw_type_defs[dev_data->hw_type].name); in qed_dump_common_global_params()
1344 dump, "pci-func", p_hwfn->abs_pf_id); in qed_dump_common_global_params()
1347 if (dev_data->chip_id == CHIP_BB) in qed_dump_common_global_params()
1372 return offset - start_offset; in qed_dump_last_section()
1379 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_update_blocks_reset_state()
1391 rst_reg_removed = GET_FIELD(rst_reg->data, in qed_update_blocks_reset_state()
1393 rst_reg_addr = DWORDS_TO_BYTES(GET_FIELD(rst_reg->data, in qed_update_blocks_reset_state()
1408 is_removed = GET_FIELD(blk->flags, DBG_BLOCK_CHIP_IS_REMOVED); in qed_update_blocks_reset_state()
1409 has_rst_reg = GET_FIELD(blk->flags, in qed_update_blocks_reset_state()
1413 dev_data->block_in_reset[blk_id] = in qed_update_blocks_reset_state()
1414 !(reg_val[blk->reset_reg_id] & in qed_update_blocks_reset_state()
1415 BIT(blk->reset_reg_bit_offset)); in qed_update_blocks_reset_state()
1423 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_is_mode_match_rec()
1435 dbg_array = p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr; in qed_is_mode_match_rec()
1451 return dev_data->mode_enable[tree_val - MAX_INIT_MODE_OPS] > 0; in qed_is_mode_match_rec()
1477 reset_reg = qed_get_dbg_reset_reg(p_hwfn, block->reset_reg_id); in qed_bus_reset_dbg_block()
1479 DWORDS_TO_BYTES(GET_FIELD(reset_reg->data, DBG_RESET_REG_ADDR)); in qed_bus_reset_dbg_block()
1483 old_reset_reg_val & ~BIT(block->reset_reg_bit_offset); in qed_bus_reset_dbg_block()
1509 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_select_reg_addr), in qed_bus_config_dbg_line()
1511 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_dword_enable_reg_addr), in qed_bus_config_dbg_line()
1513 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_shift_reg_addr), in qed_bus_config_dbg_line()
1515 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_force_valid_reg_addr), in qed_bus_config_dbg_line()
1517 qed_wr(p_hwfn, p_ptt, DWORDS_TO_BYTES(block->dbg_force_frame_reg_addr), in qed_bus_config_dbg_line()
1525 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_bus_disable_blocks()
1534 if (GET_FIELD(block_per_chip->flags, in qed_bus_disable_blocks()
1536 dev_data->block_in_reset[block_id]) in qed_bus_disable_blocks()
1540 if (GET_FIELD(block_per_chip->flags, in qed_bus_disable_blocks()
1543 block_per_chip->dbg_dword_enable_reg_addr; in qed_bus_disable_blocks()
1545 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_bus_disable_blocks()
1548 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_bus_disable_blocks()
1604 if (block->associated_storm_letter) { in qed_grc_is_mem_included()
1606 qed_get_id_from_letter(block->associated_storm_letter); in qed_grc_is_mem_included()
1616 if (mem_group_id == big_ram->mem_group_id || in qed_grc_is_mem_included()
1617 mem_group_id == big_ram->ram_mem_group_id) in qed_grc_is_mem_included()
1618 return qed_grc_is_included(p_hwfn, big_ram->grc_param); in qed_grc_is_mem_included()
1695 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_unreset_blocks()
1696 u8 chip_id = dev_data->chip_id; in qed_grc_unreset_blocks()
1701 if (s_rbc_reset_defs[i].reset_val[dev_data->chip_id]) in qed_grc_unreset_blocks()
1722 GET_FIELD(block->flags, DBG_BLOCK_CHIP_IS_REMOVED); in qed_grc_unreset_blocks()
1724 GET_FIELD(block->flags, in qed_grc_unreset_blocks()
1727 GET_FIELD(block->flags, in qed_grc_unreset_blocks()
1731 reg_val[block->reset_reg_id] |= in qed_grc_unreset_blocks()
1732 BIT(block->reset_reg_bit_offset); in qed_grc_unreset_blocks()
1744 (reset_reg->data, DBG_RESET_REG_IS_REMOVED)) in qed_grc_unreset_blocks()
1749 GET_FIELD(reset_reg->data, in qed_grc_unreset_blocks()
1768 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr; in qed_get_block_attn_data()
1782 *num_attn_regs = block_type_data->num_regs; in qed_get_block_attn_regs()
1785 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr + in qed_get_block_attn_regs()
1786 block_type_data->regs_offset; in qed_get_block_attn_regs()
1793 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_clear_all_prty()
1799 if (dev_data->block_in_reset[block_id]) in qed_grc_clear_all_prty()
1814 eval_mode = GET_FIELD(reg_data->mode.data, in qed_grc_clear_all_prty()
1817 GET_FIELD(reg_data->mode.data, in qed_grc_clear_all_prty()
1820 sts_clr_address = reg_data->sts_clr_address; in qed_grc_clear_all_prty()
1915 bytes_left -= ret_read_size; in qed_nvram_read()
1923 * - count: no. of dumped entries
1924 * - split_type: split type
1925 * - split_id: split ID (dumped only if split_id != SPLIT_TYPE_NONE)
1926 * - reg_type_name: register type name (dumped only if reg_type_name != NULL)
1978 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_addr_range()
1995 port_id = split_id / dev_data->num_pfs_per_port; in qed_grc_dump_addr_range()
1996 pf_id = port_id + dev_data->num_ports * in qed_grc_dump_addr_range()
1997 (split_id % dev_data->num_pfs_per_port); in qed_grc_dump_addr_range()
2007 if (dev_data->use_dmae && split_type != SPLIT_TYPE_VF && in qed_grc_dump_addr_range()
2008 (len >= s_hw_type_defs[dev_data->hw_type].dmae_thresh || in qed_grc_dump_addr_range()
2045 dev_data->use_dmae = 0; in qed_grc_dump_addr_range()
2058 if (split_type != dev_data->pretend.split_type || in qed_grc_dump_addr_range()
2059 split_id != dev_data->pretend.split_id) { in qed_grc_dump_addr_range()
2084 dev_data->pretend.split_type = (u8)split_type; in qed_grc_dump_addr_range()
2085 dev_data->pretend.split_id = split_id; in qed_grc_dump_addr_range()
2093 dev_data->num_regs_read += len; in qed_grc_dump_addr_range()
2094 thresh = s_hw_type_defs[dev_data->hw_type].log_thresh; in qed_grc_dump_addr_range()
2095 if ((dev_data->num_regs_read / thresh) > in qed_grc_dump_addr_range()
2096 ((dev_data->num_regs_read - len) / thresh)) in qed_grc_dump_addr_range()
2099 "Dumped %d registers...\n", dev_data->num_regs_read); in qed_grc_dump_addr_range()
2139 * - addr: start GRC address in dwords
2140 * - total_len: total no. of dwords to dump
2141 * - read_len: no. consecutive dwords to read
2142 * - skip_len: no. of dwords to skip (and fill with zeros)
2160 u32 curr_len = min_t(u32, read_len, total_len - reg_offset); in qed_grc_dump_reg_entry_skip()
2171 curr_len = min_t(u32, skip_len, total_len - skip_len); in qed_grc_dump_reg_entry_skip()
2206 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_regs_entries()
2210 GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_regs_entries()
2216 if (!mode_match || !block_enable[cond_hdr->block_id]) { in qed_grc_dump_regs_entries()
2217 input_offset += cond_hdr->data_size; in qed_grc_dump_regs_entries()
2221 for (i = 0; i < cond_hdr->data_size; i++, input_offset++) { in qed_grc_dump_regs_entries()
2228 addr = GET_FIELD(reg->data, DBG_DUMP_REG_ADDRESS); in qed_grc_dump_regs_entries()
2229 len = GET_FIELD(reg->data, DBG_DUMP_REG_LENGTH); in qed_grc_dump_regs_entries()
2230 wide_bus = GET_FIELD(reg->data, DBG_DUMP_REG_WIDE_BUS); in qed_grc_dump_regs_entries()
2256 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_split_data()
2264 hdr_split_id = split_id / dev_data->num_pfs_per_port; in qed_grc_dump_split_data()
2307 &p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG]; in qed_grc_dump_registers()
2308 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_registers()
2311 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_grc_dump_registers()
2321 dbg_buf->ptr + input_offset++; in qed_grc_dump_registers()
2323 GET_FIELD(split_hdr->hdr, in qed_grc_dump_registers()
2325 split_data_size = GET_FIELD(split_hdr->hdr, in qed_grc_dump_registers()
2328 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG].ptr + in qed_grc_dump_registers()
2337 split_count = dev_data->num_ports; in qed_grc_dump_registers()
2341 split_count = dev_data->num_ports * in qed_grc_dump_registers()
2342 dev_data->num_pfs_per_port; in qed_grc_dump_registers()
2345 split_count = dev_data->num_vfs; in qed_grc_dump_registers()
2367 p_hwfn->rel_pf_id)); in qed_grc_dump_registers()
2368 dev_data->pretend.split_type = SPLIT_TYPE_NONE; in qed_grc_dump_registers()
2369 dev_data->pretend.split_id = 0; in qed_grc_dump_registers()
2396 if (GET_FIELD(reset_reg->data, DBG_RESET_REG_IS_REMOVED)) in qed_grc_dump_reset_regs()
2399 reset_reg_addr = GET_FIELD(reset_reg->data, DBG_RESET_REG_ADDR); in qed_grc_dump_reset_regs()
2425 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_modified_regs()
2438 if (dev_data->block_in_reset[block_id] && dump) in qed_grc_dump_modified_regs()
2454 eval_mode = GET_FIELD(reg_data->mode.data, in qed_grc_dump_modified_regs()
2457 GET_FIELD(reg_data->mode.data, in qed_grc_dump_modified_regs()
2464 addr = reg_data->mask_address; in qed_grc_dump_modified_regs()
2472 addr = GET_FIELD(reg_data->data, in qed_grc_dump_modified_regs()
2503 if (dev_data->block_in_reset[storm->sem_block_id] && dump) in qed_grc_dump_modified_regs()
2507 BYTES_TO_DWORDS(storm->sem_fast_mem_addr + in qed_grc_dump_modified_regs()
2567 * - name: dumped only if it's not NULL.
2568 * - addr: in dwords, dumped only if name is NULL.
2569 * - len: in dwords, always dumped.
2570 * - width: dumped if it's not zero.
2571 * - packed: dumped only if it's not false.
2572 * - mem_group: always dumped.
2573 * - is_storm: true only if the memory is related to a Storm.
2574 * - storm_letter: valid only if is_storm is true.
2593 "Unexpected GRC Dump error: dumped memory size must be non-zero\n"); in qed_grc_dump_mem_hdr()
2704 num_entries = cond_hdr->data_size / MEM_DUMP_ENTRY_SIZE_DWORDS; in qed_grc_dump_mem_entries()
2707 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_mem_entries()
2711 GET_FIELD(cond_hdr->mode.data, in qed_grc_dump_mem_entries()
2718 input_offset += cond_hdr->data_size; in qed_grc_dump_mem_entries()
2734 mem_group_id = GET_FIELD(mem->dword0, in qed_grc_dump_mem_entries()
2743 cond_hdr->block_id, in qed_grc_dump_mem_entries()
2747 mem_addr = GET_FIELD(mem->dword0, DBG_DUMP_MEM_ADDRESS); in qed_grc_dump_mem_entries()
2748 mem_len = GET_FIELD(mem->dword1, DBG_DUMP_MEM_LENGTH); in qed_grc_dump_mem_entries()
2749 mem_wide_bus = GET_FIELD(mem->dword1, in qed_grc_dump_mem_entries()
2753 cond_hdr->block_id); in qed_grc_dump_mem_entries()
2758 if (block->associated_storm_letter) in qed_grc_dump_mem_entries()
2759 storm_letter = block->associated_storm_letter; in qed_grc_dump_mem_entries()
2788 &p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_MEM]; in qed_grc_dump_memories()
2791 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_grc_dump_memories()
2798 (const struct dbg_dump_split_hdr *)dbg_buf->ptr + in qed_grc_dump_memories()
2800 split_type = GET_FIELD(split_hdr->hdr, in qed_grc_dump_memories()
2802 split_data_size = GET_FIELD(split_hdr->hdr, in qed_grc_dump_memories()
2804 curr_input_mems_arr.ptr = (u32 *)dbg_buf->ptr + input_offset; in qed_grc_dump_memories()
2825 * The lid_size argument is specified in quad-regs.
2835 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_ctx_data()
2840 /* Convert quad-regs to dwords */ in qed_grc_dump_ctx_data()
2841 lid_size = storm->cm_ctx_lid_sizes[dev_data->chip_id][ctx_type] * 4; in qed_grc_dump_ctx_data()
2855 false, name, storm->letter); in qed_grc_dump_ctx_data()
2860 rd_reg_addr = BYTES_TO_DWORDS(storm->cm_ctx_rd_addr[ctx_type]); in qed_grc_dump_ctx_data()
2866 p_ptt, storm->cm_ctx_wr_addr, (i << 9) | lid); in qed_grc_dump_ctx_data()
2953 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_read_from_vfc()
2958 sem_base = storm->sem_fast_mem_addr; in qed_grc_dump_read_from_vfc()
2960 s_hw_type_defs[dev_data->hw_type].delay_factor; in qed_grc_dump_read_from_vfc()
3026 false, "vfc_cam", storm->letter); in qed_grc_dump_vfc_cam()
3058 u32 total_size = ram_defs->num_rows * VFC_RAM_RESP_DWORDS; in qed_grc_dump_vfc_ram()
3067 ram_defs->mem_name, in qed_grc_dump_vfc_ram()
3072 ram_defs->type_name, in qed_grc_dump_vfc_ram()
3073 storm->letter); in qed_grc_dump_vfc_ram()
3082 for (row = ram_defs->base_row; in qed_grc_dump_vfc_ram()
3083 row < ram_defs->base_row + ram_defs->num_rows; row++) { in qed_grc_dump_vfc_ram()
3135 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_rss()
3146 rss_addr = rss_defs->addr; in qed_grc_dump_rss()
3147 num_entries = rss_defs->num_entries[dev_data->chip_id]; in qed_grc_dump_rss()
3148 total_dwords = (num_entries * rss_defs->entry_width) / 32; in qed_grc_dump_rss()
3149 packed = (rss_defs->entry_width == 16); in qed_grc_dump_rss()
3154 rss_defs->mem_name, in qed_grc_dump_rss()
3157 rss_defs->entry_width, in qed_grc_dump_rss()
3159 rss_defs->type_name, 0); in qed_grc_dump_rss()
3181 total_dwords -= num_dwords_to_read; in qed_grc_dump_rss()
3194 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_big_ram()
3201 ram_size = big_ram->ram_size[dev_data->chip_id]; in qed_grc_dump_big_ram()
3203 reg_val = qed_rd(p_hwfn, p_ptt, big_ram->is_256b_reg_addr); in qed_grc_dump_big_ram()
3205 BIT(big_ram->is_256b_bit_offset[dev_data->chip_id]) ? 256 in qed_grc_dump_big_ram()
3208 memcpy(type_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3209 memcpy(mem_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3230 qed_wr(p_hwfn, p_ptt, big_ram->addr_reg_addr, i); in qed_grc_dump_big_ram()
3231 addr = BYTES_TO_DWORDS(big_ram->data_reg_addr); in qed_grc_dump_big_ram()
3287 /* Dump required non-MCP registers */ in qed_grc_dump_mcp()
3323 addr_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3324 phy_defs->tbus_addr_lo_addr; in qed_grc_dump_phy()
3325 addr_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3326 phy_defs->tbus_addr_hi_addr; in qed_grc_dump_phy()
3327 data_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3328 phy_defs->tbus_data_lo_addr; in qed_grc_dump_phy()
3329 data_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3330 phy_defs->tbus_data_hi_addr; in qed_grc_dump_phy()
3333 phy_defs->phy_name) < 0) in qed_grc_dump_phy()
3425 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_static_debug()
3455 is_removed = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3457 has_dbg_bus = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3461 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3464 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3481 block->name, in qed_grc_dump_static_debug()
3491 /* If all lines are invalid - dump zeros */ in qed_grc_dump_static_debug()
3492 if (dev_data->block_in_reset[block_id]) { in qed_grc_dump_static_debug()
3502 BIT(block_per_chip->dbg_client_id)); in qed_grc_dump_static_debug()
3547 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump()
3553 dev_data->num_regs_read = 0; in qed_grc_dump()
3564 dump, "dump-type", "grc-dump"); in qed_grc_dump()
3567 "num-lcids", in qed_grc_dump()
3571 "num-ltids", in qed_grc_dump()
3574 dump, "num-ports", dev_data->num_ports); in qed_grc_dump()
3672 DBG_GRC_PARAM_DUMP_PHY) && dev_data->chip_id == in qed_grc_dump()
3673 CHIP_K2 && dev_data->hw_type == HW_TYPE_ASIC) in qed_grc_dump()
3687 (!dump || dev_data->bus.state == DBG_BUS_STATE_IDLE)) in qed_grc_dump()
3724 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_failure()
3734 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_failure()
3735 rule->reg_offset; in qed_idle_chk_dump_failure()
3737 info_regs = &regs[rule->num_cond_regs].info_reg; in qed_idle_chk_dump_failure()
3742 hdr->rule_id = rule_id; in qed_idle_chk_dump_failure()
3743 hdr->mem_entry_id = fail_entry_id; in qed_idle_chk_dump_failure()
3744 hdr->severity = rule->severity; in qed_idle_chk_dump_failure()
3745 hdr->num_dumped_cond_regs = rule->num_cond_regs; in qed_idle_chk_dump_failure()
3751 for (reg_id = 0; reg_id < rule->num_cond_regs; reg_id++) { in qed_idle_chk_dump_failure()
3761 reg->entry_size; in qed_idle_chk_dump_failure()
3767 reg_hdr->start_entry = reg->start_entry; in qed_idle_chk_dump_failure()
3768 reg_hdr->size = reg->entry_size; in qed_idle_chk_dump_failure()
3769 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3771 reg->num_entries > 1 || reg->start_entry > 0 ? 1 : 0); in qed_idle_chk_dump_failure()
3772 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3776 for (i = 0; i < reg_hdr->size; i++, next_reg_offset++, offset++) in qed_idle_chk_dump_failure()
3781 for (reg_id = 0; reg_id < rule->num_info_regs; reg_id++) { in qed_idle_chk_dump_failure()
3787 offset += IDLE_CHK_RESULT_REG_HDR_DWORDS + reg->size; in qed_idle_chk_dump_failure()
3791 block_id = GET_FIELD(reg->data, DBG_IDLE_CHK_INFO_REG_BLOCK_ID); in qed_idle_chk_dump_failure()
3797 if (!dev_data->block_in_reset[block_id]) { in qed_idle_chk_dump_failure()
3807 eval_mode = GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3811 GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3821 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3823 wide_bus = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3828 hdr->num_dumped_info_regs++; in qed_idle_chk_dump_failure()
3830 reg_hdr->size = reg->size; in qed_idle_chk_dump_failure()
3831 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3833 rule->num_cond_regs + reg_id); in qed_idle_chk_dump_failure()
3841 reg->size, wide_bus, in qed_idle_chk_dump_failure()
3856 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_rule_entries()
3874 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_rule_entries()
3875 rule->reg_offset; in qed_idle_chk_dump_rule_entries()
3878 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr + in qed_idle_chk_dump_rule_entries()
3879 rule->imm_offset; in qed_idle_chk_dump_rule_entries()
3885 for (reg_id = 0; reg_id < rule->num_cond_regs && check_rule; in qed_idle_chk_dump_rule_entries()
3896 check_rule = !dev_data->block_in_reset[block_id]; in qed_idle_chk_dump_rule_entries()
3910 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3927 for (reg_id = 0; reg_id < rule->num_cond_regs; in qed_idle_chk_dump_rule_entries()
3937 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3940 GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3942 if (reg->num_entries > 1 || in qed_idle_chk_dump_rule_entries()
3943 reg->start_entry > 0) { in qed_idle_chk_dump_rule_entries()
3945 reg->entry_size > 1 ? in qed_idle_chk_dump_rule_entries()
3946 roundup_pow_of_two(reg->entry_size) : in qed_idle_chk_dump_rule_entries()
3948 addr += (reg->start_entry + entry_id) * in qed_idle_chk_dump_rule_entries()
3953 if (next_reg_offset + reg->entry_size >= in qed_idle_chk_dump_rule_entries()
3965 reg->entry_size, in qed_idle_chk_dump_rule_entries()
3973 if ((*cond_arr[rule->cond_id]) (cond_reg_values, in qed_idle_chk_dump_rule_entries()
3979 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3998 &p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES]; in qed_idle_chk_dump()
4002 /* Dump global params - 1 must match below amount of params */ in qed_idle_chk_dump()
4007 dump, "dump-type", "idle-chk"); in qed_idle_chk_dump()
4014 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_idle_chk_dump()
4016 (const struct dbg_idle_chk_cond_hdr *)dbg_buf->ptr + in qed_idle_chk_dump()
4023 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
4027 GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
4036 dbg_buf->ptr in qed_idle_chk_dump()
4039 cond_hdr->data_size / IDLE_CHK_RULE_SIZE_DWORDS; in qed_idle_chk_dump()
4052 input_offset += cond_hdr->data_size; in qed_idle_chk_dump()
4067 * - trace_data_grc_addr (OUT): trace data GRC address in bytes
4068 * - trace_data_size (OUT): trace data size in bytes (without the header)
4102 * - running_bundle_id (OUT): running bundle ID (invalid when loaded from file)
4103 * - trace_meta_offset (OUT): trace meta offset in NVRAM in bytes (invalid when
4105 * - trace_meta_size (OUT): size in bytes of the trace meta data.
4213 dump, "dump-type", "mcp-trace"); in qed_mcp_trace_dump()
4255 * trace_meta_size_bytes is dword-aligned. in qed_mcp_trace_dump()
4310 dump, "dump-type", "reg-fifo"); in qed_reg_fifo_dump()
4380 dump, "dump-type", "igu-fifo"); in qed_igu_fifo_dump()
4450 dump, "dump-type", "protection-override"); in qed_protection_override_dump()
4496 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_fw_asserts_dump()
4508 dump, "dump-type", "fw-asserts"); in qed_fw_asserts_dump()
4516 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_fw_asserts_dump()
4525 storm_letter_str[0] = storm->letter; in qed_fw_asserts_dump()
4533 asserts->list_element_dword_size); in qed_fw_asserts_dump()
4537 offset += asserts->list_element_dword_size; in qed_fw_asserts_dump()
4541 addr = le16_to_cpu(asserts->section_ram_line_offset); in qed_fw_asserts_dump()
4542 fw_asserts_section_addr = storm->sem_fast_mem_addr + in qed_fw_asserts_dump()
4547 DWORDS_TO_BYTES(asserts->list_next_index_dword_offset); in qed_fw_asserts_dump()
4551 asserts->list_num_elements) - 1; in qed_fw_asserts_dump()
4553 asserts->list_dword_offset + in qed_fw_asserts_dump()
4554 last_list_idx * asserts->list_element_dword_size; in qed_fw_asserts_dump()
4559 asserts->list_element_dword_size, in qed_fw_asserts_dump()
4588 end_page_id = start_page_id + num_pages - 1; in qed_ilt_dump_pages_range()
4610 (offset + BYTES_TO_DWORDS(mem_desc->size) > in qed_ilt_dump_pages_range()
4612 if (offset + BYTES_TO_DWORDS(mem_desc->size) > in qed_ilt_dump_pages_range()
4615 buf_size_in_dwords - offset; in qed_ilt_dump_pages_range()
4617 mem_desc->virt_addr, in qed_ilt_dump_pages_range()
4627 mem_desc->virt_addr, mem_desc->size); in qed_ilt_dump_pages_range()
4628 offset += BYTES_TO_DWORDS(mem_desc->size); in qed_ilt_dump_pages_range()
4653 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump_pages_section()
4675 pf_start_line = p_hwfn->p_cxt_mngr->pf_start_line; in qed_ilt_dump_pages_section()
4699 * - PF pages - valid section (included in PF connection type mapping) in qed_ilt_dump_pages_section()
4700 * - PF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4701 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4702 * - VF pages - valid section (included in VF connection type mapping) in qed_ilt_dump_pages_section()
4703 * - VF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4707 start_page_id = clients[ILT_CLI_CDUC].first.val - pf_start_line; in qed_ilt_dump_pages_section()
4716 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4727 * - PF init pages (not dumped) in qed_ilt_dump_pages_section()
4728 * - PF work pages in qed_ilt_dump_pages_section()
4729 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4730 * - VF init pages (not dumped) in qed_ilt_dump_pages_section()
4731 * - VF work pages in qed_ilt_dump_pages_section()
4736 cdut_pf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4745 cdut_pf_pages + cdut_vf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4746 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4758 start_page_id = clients[ILT_CLI_SRC].first.val - pf_start_line; in qed_ilt_dump_pages_section()
4759 src_pages = clients[ILT_CLI_SRC].last.val - in qed_ilt_dump_pages_section()
4770 offset - base_data_offset : in qed_ilt_dump_pages_section()
4771 actual_dump_size_in_dwords - base_data_offset; in qed_ilt_dump_pages_section()
4776 actual_dump_size_in_dwords -= in qed_ilt_dump_pages_section()
4802 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump_dump_common_global_params()
4810 "dump-type", "ilt-dump"); in qed_ilt_dump_dump_common_global_params()
4813 "cduc-page-size", in qed_ilt_dump_dump_common_global_params()
4817 "cduc-first-page-id", in qed_ilt_dump_dump_common_global_params()
4821 "cduc-last-page-id", in qed_ilt_dump_dump_common_global_params()
4825 "cduc-num-pf-pages", in qed_ilt_dump_dump_common_global_params()
4829 "cduc-num-vf-pages", in qed_ilt_dump_dump_common_global_params()
4833 "max-conn-ctx-size", in qed_ilt_dump_dump_common_global_params()
4837 "cdut-page-size", in qed_ilt_dump_dump_common_global_params()
4841 "cdut-first-page-id", in qed_ilt_dump_dump_common_global_params()
4845 "cdut-last-page-id", in qed_ilt_dump_dump_common_global_params()
4849 "cdut-num-pf-init-pages", in qed_ilt_dump_dump_common_global_params()
4853 "cdut-num-vf-init-pages", in qed_ilt_dump_dump_common_global_params()
4857 "cdut-num-pf-work-pages", in qed_ilt_dump_dump_common_global_params()
4861 "cdut-num-vf-work-pages", in qed_ilt_dump_dump_common_global_params()
4865 "max-task-ctx-size", in qed_ilt_dump_dump_common_global_params()
4866 p_hwfn->p_cxt_mngr->task_ctx_size); in qed_ilt_dump_dump_common_global_params()
4869 "first-vf-id-in-pf", in qed_ilt_dump_dump_common_global_params()
4870 p_hwfn->p_cxt_mngr->first_vf_in_pf); in qed_ilt_dump_dump_common_global_params()
4873 "num-vfs-in-pf", in qed_ilt_dump_dump_common_global_params()
4874 p_hwfn->p_cxt_mngr->vf_count); in qed_ilt_dump_dump_common_global_params()
4877 "ptr-size-bytes", in qed_ilt_dump_dump_common_global_params()
4881 "pf-start-line", in qed_ilt_dump_dump_common_global_params()
4882 p_hwfn->p_cxt_mngr->pf_start_line); in qed_ilt_dump_dump_common_global_params()
4885 "page-mem-desc-size-dwords", in qed_ilt_dump_dump_common_global_params()
4889 "ilt-shadow-size", in qed_ilt_dump_dump_common_global_params()
4890 p_hwfn->p_cxt_mngr->ilt_shadow_size); in qed_ilt_dump_dump_common_global_params()
4895 dump, "dump-size-full", 0); in qed_ilt_dump_dump_common_global_params()
4901 "dump-size-actual", 0); in qed_ilt_dump_dump_common_global_params()
4905 p_hwfn->p_cxt_mngr->iscsi_task_pages); in qed_ilt_dump_dump_common_global_params()
4909 p_hwfn->p_cxt_mngr->fcoe_task_pages); in qed_ilt_dump_dump_common_global_params()
4913 p_hwfn->p_cxt_mngr->roce_task_pages); in qed_ilt_dump_dump_common_global_params()
4917 p_hwfn->p_cxt_mngr->eth_task_pages); in qed_ilt_dump_dump_common_global_params()
4920 "src-first-page-id", in qed_ilt_dump_dump_common_global_params()
4924 "src-last-page-id", in qed_ilt_dump_dump_common_global_params()
4928 "src-is-active", in qed_ilt_dump_dump_common_global_params()
4956 num_pf_cids = p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cid_count; in qed_ilt_dump_dump_num_pf_cids()
4984 p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cids_per_vf; in qed_ilt_dump_dump_num_vf_cids()
4994 * buf_size_in_dwords - The dumped buffer size.
5002 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump()
5023 conn_ctx_size = p_hwfn->p_cxt_mngr->conn_ctx_size; in qed_ilt_dump()
5025 ilt_pages = p_hwfn->p_cxt_mngr->ilt_shadow; in qed_ilt_dump()
5033 buf_size_in_dwords -= last_section_size; in qed_ilt_dump()
5044 * section without dumping. if there is not enough memory - then in qed_ilt_dump()
5119 num_pages = p_hwfn->p_cxt_mngr->ilt_shadow_size; in qed_ilt_dump()
5190 "full-dump-size", offset + last_section_size); in qed_ilt_dump()
5193 "actual-dump-size", in qed_ilt_dump()
5234 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_read_fw_info()
5241 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_read_fw_info()
5256 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_config()
5293 if (defs->is_persistent) in qed_dbg_grc_config()
5299 defs->exclude_all_preset_val; in qed_dbg_grc_config()
5302 defs->crash_preset_val[dev_data->chip_id]; in qed_dbg_grc_config()
5309 /* Regular param - set its value */ in qed_dbg_grc_config()
5319 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_set_params_default()
5324 dev_data->grc.param_val[i] = in qed_dbg_grc_set_params_default()
5325 s_grc_param_defs[i].default_val[dev_data->chip_id]; in qed_dbg_grc_set_params_default()
5339 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_grc_get_dump_buf_size()
5340 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG].ptr || in qed_dbg_grc_get_dump_buf_size()
5341 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_MEM].ptr || in qed_dbg_grc_get_dump_buf_size()
5342 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_grc_get_dump_buf_size()
5343 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_grc_get_dump_buf_size()
5385 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_idle_chk_get_dump_buf_size()
5386 struct idle_chk_data *idle_chk = &dev_data->idle_chk; in qed_dbg_idle_chk_get_dump_buf_size()
5395 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5396 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5397 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5398 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES].ptr) in qed_dbg_idle_chk_get_dump_buf_size()
5401 if (!idle_chk->buf_size_set) { in qed_dbg_idle_chk_get_dump_buf_size()
5402 idle_chk->buf_size = qed_idle_chk_dump(p_hwfn, in qed_dbg_idle_chk_get_dump_buf_size()
5404 idle_chk->buf_size_set = true; in qed_dbg_idle_chk_get_dump_buf_size()
5407 *buf_size = idle_chk->buf_size; in qed_dbg_idle_chk_get_dump_buf_size()
5728 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_read_attn()
5729 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_read_attn()
5730 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_read_attn()
5745 eval_mode = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5747 modes_buf_offset = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5752 /* Mode match - read attention status register */ in qed_dbg_read_attn()
5754 reg_data->sts_clr_address : in qed_dbg_read_attn()
5755 GET_FIELD(reg_data->data, in qed_dbg_read_attn()
5761 /* Non-zero attention status - add to results */ in qed_dbg_read_attn()
5762 reg_result = &results->reg_results[num_result_regs]; in qed_dbg_read_attn()
5763 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5765 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5767 GET_FIELD(reg_data->data, DBG_ATTN_REG_NUM_REG_ATTN)); in qed_dbg_read_attn()
5768 reg_result->block_attn_offset = reg_data->block_attn_offset; in qed_dbg_read_attn()
5769 reg_result->sts_val = sts_val; in qed_dbg_read_attn()
5770 reg_result->mask_val = qed_rd(p_hwfn, in qed_dbg_read_attn()
5773 (reg_data->mask_address)); in qed_dbg_read_attn()
5777 results->block_id = (u8)block_id; in qed_dbg_read_attn()
5778 results->names_offset = in qed_dbg_read_attn()
5779 qed_get_block_attn_data(p_hwfn, block_id, attn_type)->names_offset; in qed_dbg_read_attn()
5780 SET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE, attn_type); in qed_dbg_read_attn()
5781 SET_FIELD(results->data, in qed_dbg_read_attn()
5924 (MCP_TRACE_FORMAT_P2_SIZE_OFFSET - MCP_TRACE_FORMAT_P1_SIZE_OFFSET)
5986 "Filters and triggers are not allowed in E4 256-bit mode",
6040 "NVRAM image is not dword-aligned",
6052 "Dump doesn't contain meta data - it must be provided in image file",
6088 "Non-matching debug lines - in E4, all lines must be of the same type (either 128b or 256b)",
6148 "Could not allocate MDUMP2 reg-val internal buffer"
6215 {4, "reserved address in block or write to read-only address"},
6257 {0x0, 0x101, "MSI-X Memory", NULL,
6309 return (size + a - b) % size; in qed_cyclic_sub()
6398 offset += (4 - (offset & 0x3)); in qed_read_param()
6403 offset += (4 - (offset & 0x3)); in qed_read_param()
6446 else if (strcmp(param_name, "fw-timestamp")) in qed_print_section_params()
6469 p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS_USER_DATA].ptr + block_id; in qed_dbg_get_block_name()
6471 return (const char *)block->name; in qed_dbg_get_block_name()
6477 return (struct dbg_tools_user_data *)p_hwfn->dbg_user_info; in qed_dbg_get_user_data()
6513 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr + in qed_parse_idle_chk_dump_rules()
6514 hdr->rule_id; in qed_parse_idle_chk_dump_rules()
6516 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6519 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6522 p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr + in qed_parse_idle_chk_dump_rules()
6527 if (hdr->severity >= MAX_DBG_IDLE_CHK_SEVERITY_TYPES) in qed_parse_idle_chk_dump_rules()
6534 if (hdr->severity == IDLE_CHK_SEVERITY_ERROR || in qed_parse_idle_chk_dump_rules()
6535 hdr->severity == IDLE_CHK_SEVERITY_ERROR_NO_TRAFFIC) in qed_parse_idle_chk_dump_rules()
6544 s_idle_chk_severity_str[hdr->severity]); in qed_parse_idle_chk_dump_rules()
6561 i < hdr->num_dumped_cond_regs + hdr->num_dumped_info_regs; in qed_parse_idle_chk_dump_rules()
6569 is_mem = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6571 reg_id = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6587 if (i < hdr->num_dumped_cond_regs && is_mem) in qed_parse_idle_chk_dump_rules()
6591 "[%d]", hdr->mem_entry_id + in qed_parse_idle_chk_dump_rules()
6592 reg_hdr->start_entry); in qed_parse_idle_chk_dump_rules()
6596 for (j = 0; j < reg_hdr->size; j++, dump_buf++) { in qed_parse_idle_chk_dump_rules()
6601 if (j < reg_hdr->size - 1) in qed_parse_idle_chk_dump_rules()
6645 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr || in qed_parse_idle_chk_dump()
6646 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr) in qed_parse_idle_chk_dump()
6662 * - 1st is "num_rules" in qed_parse_idle_chk_dump()
6663 * - 2nd is "num_rules_not_dumped" (optional) in qed_parse_idle_chk_dump()
6778 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_alloc_meta_data()
6782 if (meta->is_allocated) in qed_mcp_trace_alloc_meta_data()
6793 meta->modules_num = qed_read_byte_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6794 meta->modules = kcalloc(meta->modules_num, sizeof(char *), in qed_mcp_trace_alloc_meta_data()
6796 if (!meta->modules) in qed_mcp_trace_alloc_meta_data()
6800 for (i = 0; i < meta->modules_num; i++) { in qed_mcp_trace_alloc_meta_data()
6803 *(meta->modules + i) = kzalloc(module_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6804 if (!(*(meta->modules + i))) { in qed_mcp_trace_alloc_meta_data()
6806 meta->modules_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6811 *(meta->modules + i)); in qed_mcp_trace_alloc_meta_data()
6813 (*(meta->modules + i))[MCP_TRACE_MAX_MODULE_LEN] = '\0'; in qed_mcp_trace_alloc_meta_data()
6822 meta->formats_num = qed_read_dword_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6823 meta->formats = kcalloc(meta->formats_num, in qed_mcp_trace_alloc_meta_data()
6826 if (!meta->formats) in qed_mcp_trace_alloc_meta_data()
6830 for (i = 0; i < meta->formats_num; i++) { in qed_mcp_trace_alloc_meta_data()
6831 struct mcp_trace_format *format_ptr = &meta->formats[i]; in qed_mcp_trace_alloc_meta_data()
6834 format_ptr->data = qed_read_dword_from_buf(meta_buf_bytes, in qed_mcp_trace_alloc_meta_data()
6836 format_len = GET_MFW_FIELD(format_ptr->data, in qed_mcp_trace_alloc_meta_data()
6838 format_ptr->format_str = kzalloc(format_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6839 if (!format_ptr->format_str) { in qed_mcp_trace_alloc_meta_data()
6841 meta->formats_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6847 format_len, format_ptr->format_str); in qed_mcp_trace_alloc_meta_data()
6850 meta->is_allocated = true; in qed_mcp_trace_alloc_meta_data()
6857 * trace_buf - MCP trace cyclic buffer
6858 * trace_buf_size - MCP trace cyclic buffer size in bytes
6859 * data_offset - offset in bytes of the data to parse in the MCP trace cyclic
6861 * data_size - size in bytes of data to parse.
6862 * parsed_buf - destination buffer for parsed data.
6863 * parsed_results_bytes - size of parsed data in bytes.
6879 meta = &dev_user_data->mcp_trace_meta; in qed_parse_mcp_trace_buf()
6882 if (!meta->is_allocated) in qed_parse_mcp_trace_buf()
6900 data_size -= MFW_TRACE_ENTRY_SIZE; in qed_parse_mcp_trace_buf()
6904 if (format_idx >= meta->formats_num) { in qed_parse_mcp_trace_buf()
6914 data_size -= format_size; in qed_parse_mcp_trace_buf()
6918 format_ptr = &meta->formats[format_idx]; in qed_parse_mcp_trace_buf()
6927 u8 param_size = (u8)((format_ptr->data & param_mask) >> in qed_parse_mcp_trace_buf()
6949 data_size -= param_size; in qed_parse_mcp_trace_buf()
6952 format_level = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6954 format_module = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6963 "%s %-8s: ", in qed_parse_mcp_trace_buf()
6965 meta->modules[format_module]); in qed_parse_mcp_trace_buf()
6968 format_ptr->format_str, in qed_parse_mcp_trace_buf()
7025 if (trace->signature != MFW_TRACE_SIGNATURE || !trace->size) in qed_parse_mcp_trace_dump()
7029 offset = trace->trace_oldest; in qed_parse_mcp_trace_dump()
7030 data_size = qed_cyclic_sub(trace->trace_prod, offset, trace->size); in qed_parse_mcp_trace_dump()
7050 if (!dev_user_data->mcp_trace_user_meta_buf) in qed_parse_mcp_trace_dump()
7053 meta_buf = dev_user_data->mcp_trace_user_meta_buf; in qed_parse_mcp_trace_dump()
7066 trace->size, in qed_parse_mcp_trace_dump()
7147 …0x%016llx, address: 0x%07x, access: %-5s, pf: %2d, vf: %s, port: %d, privilege: %-3s, protection: … in qed_parse_reg_fifo_dump()
7195 dword12 = ((u64)element->dword2 << 32) | element->dword1; in qed_parse_igu_fifo_element()
7197 is_pf = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_IS_PF); in qed_parse_igu_fifo_element()
7198 cmd_addr = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_CMD_ADDR); in qed_parse_igu_fifo_element()
7199 source = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_SOURCE); in qed_parse_igu_fifo_element()
7200 err_type = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_ERR_TYPE); in qed_parse_igu_fifo_element()
7212 if (cmd_addr >= curr_addr->start_addr && cmd_addr <= in qed_parse_igu_fifo_element()
7213 curr_addr->end_addr) in qed_parse_igu_fifo_element()
7221 switch (found_addr->type) { in qed_parse_igu_fifo_element()
7228 " SB = 0x%x", cmd_addr - found_addr->start_addr); in qed_parse_igu_fifo_element()
7291 element->dword2, element->dword1, in qed_parse_igu_fifo_element()
7292 element->dword0, in qed_parse_igu_fifo_element()
7294 GET_FIELD(element->dword0, in qed_parse_igu_fifo_element()
7299 (!is_pf && found_addr->vf_desc) in qed_parse_igu_fifo_element()
7300 ? found_addr->vf_desc in qed_parse_igu_fifo_element()
7301 : found_addr->desc, in qed_parse_igu_fifo_element()
7415 …s: 0x%07x, size: %7d regs, read: %d, write: %d, read protection: %-12s, write protection: %-12s\n", in qed_parse_protection_override_dump()
7590 dev_user_data->mcp_trace_user_meta_buf = meta_buf; in qed_dbg_mcp_trace_set_meta_data()
7650 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_free_meta_data()
7651 if (!meta->is_allocated) in qed_mcp_trace_free_meta_data()
7655 if (meta->modules) { in qed_mcp_trace_free_meta_data()
7656 for (i = 0; i < meta->modules_num; i++) in qed_mcp_trace_free_meta_data()
7657 kfree(meta->modules[i]); in qed_mcp_trace_free_meta_data()
7658 kfree(meta->modules); in qed_mcp_trace_free_meta_data()
7662 if (meta->formats) { in qed_mcp_trace_free_meta_data()
7663 for (i = 0; i < meta->formats_num; i++) in qed_mcp_trace_free_meta_data()
7664 kfree(meta->formats[i].format_str); in qed_mcp_trace_free_meta_data()
7665 kfree(meta->formats); in qed_mcp_trace_free_meta_data()
7668 meta->is_allocated = false; in qed_mcp_trace_free_meta_data()
7757 num_regs = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_NUM_REGS); in qed_dbg_parse_attn()
7758 attn_type = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE); in qed_dbg_parse_attn()
7759 block_name = qed_dbg_get_block_name(p_hwfn, results->block_id); in qed_dbg_parse_attn()
7763 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr || in qed_dbg_parse_attn()
7764 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr || in qed_dbg_parse_attn()
7765 !p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr) in qed_dbg_parse_attn()
7769 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr + in qed_dbg_parse_attn()
7770 results->names_offset; in qed_dbg_parse_attn()
7772 attn_name_base = p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr; in qed_dbg_parse_attn()
7774 /* Go over registers with a non-zero attention status */ in qed_dbg_parse_attn()
7780 reg_result = &results->reg_results[i]; in qed_dbg_parse_attn()
7781 num_reg_attn = GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7784 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr + in qed_dbg_parse_attn()
7785 reg_result->block_attn_offset; in qed_dbg_parse_attn()
7805 if (reg_result->sts_val & BIT(bit_idx)) { in qed_dbg_parse_attn()
7816 masked_str = reg_result->mask_val & in qed_dbg_parse_attn()
7820 GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7924 u32 i, precision = 80; in qed_dbg_print_feature() local
7929 pr_notice("\n%.*s", precision, p_text_buf); in qed_dbg_print_feature()
7930 for (i = precision; i < text_size; i += precision) in qed_dbg_print_feature()
7931 pr_cont("%.*s", precision, p_text_buf + i); in qed_dbg_print_feature()
7941 &p_hwfn->cdev->dbg_features[feature_idx]; in format_feature()
7951 dbuf = (u32 *)feature->dump_buf; in format_feature()
7952 dwords = feature->dumped_dwords; in format_feature()
7965 null_char_pos = txt_size_bytes - 1; in format_feature()
7969 DP_NOTICE(p_hwfn->cdev, in format_feature()
7978 DP_NOTICE(p_hwfn->cdev, in format_feature()
8001 if (p_hwfn->cdev->print_dbg_data) in format_feature()
8005 if (p_hwfn->cdev->dbg_bin_dump) { in format_feature()
8013 vfree(feature->dump_buf); in format_feature()
8014 feature->dump_buf = text_buf; in format_feature()
8015 feature->buf_size = txt_size_bytes; in format_feature()
8016 feature->dumped_dwords = txt_size_bytes / 4; in format_feature()
8029 &p_hwfn->cdev->dbg_features[feature_idx]; in qed_dbg_dump()
8033 DP_NOTICE(p_hwfn->cdev, "Collecting a debug feature [\"%s\"]\n", in qed_dbg_dump()
8040 if (feature->dump_buf) { in qed_dbg_dump()
8041 vfree(feature->dump_buf); in qed_dbg_dump()
8042 feature->dump_buf = NULL; in qed_dbg_dump()
8054 feature->buf_size = 0; in qed_dbg_dump()
8055 DP_NOTICE(p_hwfn->cdev, in qed_dbg_dump()
8063 feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_dump()
8064 feature->dump_buf = vmalloc(feature->buf_size); in qed_dbg_dump()
8065 if (!feature->dump_buf) in qed_dbg_dump()
8068 dbuf = (u32 *)feature->dump_buf; in qed_dbg_dump()
8069 dwords = &feature->dumped_dwords; in qed_dbg_dump()
8072 feature->buf_size / in qed_dbg_dump()
8157 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_nvm_image()
8166 DP_NOTICE(p_hwfn->cdev, in qed_dbg_nvm_image()
8290 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data()
8291 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_all_data()
8296 grc_params[i] = dev_data->grc.param_val[i]; in qed_dbg_all_data()
8301 cdev->dbg_bin_dump = 1; in qed_dbg_all_data()
8305 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data()
8320 cdev->dbg_bin_dump); in qed_dbg_all_data()
8335 cdev->dbg_bin_dump); in qed_dbg_all_data()
8350 cdev->dbg_bin_dump); in qed_dbg_all_data()
8365 cdev->dbg_bin_dump); in qed_dbg_all_data()
8382 cdev->dbg_bin_dump); in qed_dbg_all_data()
8399 cdev->dbg_bin_dump); in qed_dbg_all_data()
8407 if (!cdev->disable_ilt_dump && feature_size < in qed_dbg_all_data()
8417 cdev->dbg_bin_dump); in qed_dbg_all_data()
8425 /* Grc dump - must be last because when mcp stuck it will in qed_dbg_all_data()
8429 dev_data->grc.param_val[i] = grc_params[i]; in qed_dbg_all_data()
8439 cdev->dbg_bin_dump); in qed_dbg_all_data()
8455 cdev->dbg_bin_dump); in qed_dbg_all_data()
8470 cdev->dbg_bin_dump); in qed_dbg_all_data()
8472 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8489 cdev->dbg_bin_dump); in qed_dbg_all_data()
8491 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8507 cdev->dbg_bin_dump); in qed_dbg_all_data()
8509 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8524 cdev->dbg_bin_dump); in qed_dbg_all_data()
8526 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8533 cdev->dbg_bin_dump = 0; in qed_dbg_all_data()
8541 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data_size()
8544 cdev->disable_ilt_dump = false; in qed_dbg_all_data_size()
8546 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data_size()
8588 cdev->disable_ilt_dump = true; in qed_dbg_all_data_size()
8589 regs_len -= total_ilt_len; in qed_dbg_all_data_size()
8598 struct qed_dbg_feature *qed_feature = &cdev->dbg_features[feature]; in qed_dbg_feature()
8599 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature()
8607 return -EINVAL; in qed_dbg_feature()
8615 rc = -EINVAL; in qed_dbg_feature()
8621 memcpy(buffer, qed_feature->dump_buf, qed_feature->buf_size); in qed_dbg_feature()
8622 *num_dumped_bytes = cdev->dbg_features[feature].dumped_dwords * in qed_dbg_feature()
8632 struct qed_dbg_feature *qed_feature = &cdev->dbg_features[feature]; in qed_dbg_feature_size()
8633 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature_size()
8639 return -EINVAL; in qed_dbg_feature_size()
8651 qed_feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_feature_size()
8652 return qed_feature->buf_size; in qed_dbg_feature_size()
8665 return cdev->engine_for_debug; in qed_get_debug_engine()
8672 cdev->engine_for_debug = engine_number; in qed_set_debug_engine()
8686 dbg_values = cdev->firmware->data + *(u32 *)cdev->firmware->data; in qed_dbg_pf_init()
8689 qed_dbg_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8690 qed_dbg_user_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8694 cdev->engine_for_debug = 0; in qed_dbg_pf_init()
8706 feature = &cdev->dbg_features[feature_idx]; in qed_dbg_pf_exit()
8707 if (feature->dump_buf) { in qed_dbg_pf_exit()
8708 vfree(feature->dump_buf); in qed_dbg_pf_exit()
8709 feature->dump_buf = NULL; in qed_dbg_pf_exit()