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()
2952 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_read_from_vfc()
2957 sem_base = storm->sem_fast_mem_addr; in qed_grc_dump_read_from_vfc()
2959 s_hw_type_defs[dev_data->hw_type].delay_factor; in qed_grc_dump_read_from_vfc()
3025 false, "vfc_cam", storm->letter); in qed_grc_dump_vfc_cam()
3057 u32 total_size = ram_defs->num_rows * VFC_RAM_RESP_DWORDS; in qed_grc_dump_vfc_ram()
3066 ram_defs->mem_name, in qed_grc_dump_vfc_ram()
3071 ram_defs->type_name, in qed_grc_dump_vfc_ram()
3072 storm->letter); in qed_grc_dump_vfc_ram()
3081 for (row = ram_defs->base_row; in qed_grc_dump_vfc_ram()
3082 row < ram_defs->base_row + ram_defs->num_rows; row++) { in qed_grc_dump_vfc_ram()
3134 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_rss()
3145 rss_addr = rss_defs->addr; in qed_grc_dump_rss()
3146 num_entries = rss_defs->num_entries[dev_data->chip_id]; in qed_grc_dump_rss()
3147 total_dwords = (num_entries * rss_defs->entry_width) / 32; in qed_grc_dump_rss()
3148 packed = (rss_defs->entry_width == 16); in qed_grc_dump_rss()
3153 rss_defs->mem_name, in qed_grc_dump_rss()
3156 rss_defs->entry_width, in qed_grc_dump_rss()
3158 rss_defs->type_name, 0); in qed_grc_dump_rss()
3180 total_dwords -= num_dwords_to_read; in qed_grc_dump_rss()
3193 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_big_ram()
3200 ram_size = big_ram->ram_size[dev_data->chip_id]; in qed_grc_dump_big_ram()
3202 reg_val = qed_rd(p_hwfn, p_ptt, big_ram->is_256b_reg_addr); in qed_grc_dump_big_ram()
3204 BIT(big_ram->is_256b_bit_offset[dev_data->chip_id]) ? 256 in qed_grc_dump_big_ram()
3207 memcpy(type_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3208 memcpy(mem_name, big_ram->instance_name, BIG_RAM_NAME_LEN); in qed_grc_dump_big_ram()
3229 qed_wr(p_hwfn, p_ptt, big_ram->addr_reg_addr, i); in qed_grc_dump_big_ram()
3230 addr = BYTES_TO_DWORDS(big_ram->data_reg_addr); in qed_grc_dump_big_ram()
3286 /* Dump required non-MCP registers */ in qed_grc_dump_mcp()
3322 addr_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3323 phy_defs->tbus_addr_lo_addr; in qed_grc_dump_phy()
3324 addr_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3325 phy_defs->tbus_addr_hi_addr; in qed_grc_dump_phy()
3326 data_lo_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3327 phy_defs->tbus_data_lo_addr; in qed_grc_dump_phy()
3328 data_hi_addr = phy_defs->base_addr + in qed_grc_dump_phy()
3329 phy_defs->tbus_data_hi_addr; in qed_grc_dump_phy()
3332 phy_defs->phy_name) < 0) in qed_grc_dump_phy()
3424 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump_static_debug()
3454 is_removed = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3456 has_dbg_bus = GET_FIELD(block_per_chip->flags, in qed_grc_dump_static_debug()
3460 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3463 GET_FIELD(block_per_chip->dbg_bus_mode.data, in qed_grc_dump_static_debug()
3480 block->name, in qed_grc_dump_static_debug()
3490 /* If all lines are invalid - dump zeros */ in qed_grc_dump_static_debug()
3491 if (dev_data->block_in_reset[block_id]) { in qed_grc_dump_static_debug()
3501 BIT(block_per_chip->dbg_client_id)); in qed_grc_dump_static_debug()
3546 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_grc_dump()
3552 dev_data->num_regs_read = 0; in qed_grc_dump()
3563 dump, "dump-type", "grc-dump"); in qed_grc_dump()
3566 "num-lcids", in qed_grc_dump()
3570 "num-ltids", in qed_grc_dump()
3573 dump, "num-ports", dev_data->num_ports); in qed_grc_dump()
3671 DBG_GRC_PARAM_DUMP_PHY) && dev_data->chip_id == in qed_grc_dump()
3672 CHIP_K2 && dev_data->hw_type == HW_TYPE_ASIC) in qed_grc_dump()
3686 (!dump || dev_data->bus.state == DBG_BUS_STATE_IDLE)) in qed_grc_dump()
3723 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_failure()
3733 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_failure()
3734 rule->reg_offset; in qed_idle_chk_dump_failure()
3736 info_regs = &regs[rule->num_cond_regs].info_reg; in qed_idle_chk_dump_failure()
3741 hdr->rule_id = rule_id; in qed_idle_chk_dump_failure()
3742 hdr->mem_entry_id = fail_entry_id; in qed_idle_chk_dump_failure()
3743 hdr->severity = rule->severity; in qed_idle_chk_dump_failure()
3744 hdr->num_dumped_cond_regs = rule->num_cond_regs; in qed_idle_chk_dump_failure()
3750 for (reg_id = 0; reg_id < rule->num_cond_regs; reg_id++) { in qed_idle_chk_dump_failure()
3760 reg->entry_size; in qed_idle_chk_dump_failure()
3766 reg_hdr->start_entry = reg->start_entry; in qed_idle_chk_dump_failure()
3767 reg_hdr->size = reg->entry_size; in qed_idle_chk_dump_failure()
3768 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3770 reg->num_entries > 1 || reg->start_entry > 0 ? 1 : 0); in qed_idle_chk_dump_failure()
3771 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3775 for (i = 0; i < reg_hdr->size; i++, next_reg_offset++, offset++) in qed_idle_chk_dump_failure()
3780 for (reg_id = 0; reg_id < rule->num_info_regs; reg_id++) { in qed_idle_chk_dump_failure()
3786 offset += IDLE_CHK_RESULT_REG_HDR_DWORDS + reg->size; in qed_idle_chk_dump_failure()
3790 block_id = GET_FIELD(reg->data, DBG_IDLE_CHK_INFO_REG_BLOCK_ID); in qed_idle_chk_dump_failure()
3796 if (!dev_data->block_in_reset[block_id]) { in qed_idle_chk_dump_failure()
3806 eval_mode = GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3810 GET_FIELD(reg->mode.data, in qed_idle_chk_dump_failure()
3820 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3822 wide_bus = GET_FIELD(reg->data, in qed_idle_chk_dump_failure()
3827 hdr->num_dumped_info_regs++; in qed_idle_chk_dump_failure()
3829 reg_hdr->size = reg->size; in qed_idle_chk_dump_failure()
3830 SET_FIELD(reg_hdr->data, in qed_idle_chk_dump_failure()
3832 rule->num_cond_regs + reg_id); in qed_idle_chk_dump_failure()
3840 reg->size, wide_bus, in qed_idle_chk_dump_failure()
3855 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_idle_chk_dump_rule_entries()
3873 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr + in qed_idle_chk_dump_rule_entries()
3874 rule->reg_offset; in qed_idle_chk_dump_rule_entries()
3877 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr + in qed_idle_chk_dump_rule_entries()
3878 rule->imm_offset; in qed_idle_chk_dump_rule_entries()
3884 for (reg_id = 0; reg_id < rule->num_cond_regs && check_rule; in qed_idle_chk_dump_rule_entries()
3895 check_rule = !dev_data->block_in_reset[block_id]; in qed_idle_chk_dump_rule_entries()
3909 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3926 for (reg_id = 0; reg_id < rule->num_cond_regs; in qed_idle_chk_dump_rule_entries()
3936 addr = GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3939 GET_FIELD(reg->data, in qed_idle_chk_dump_rule_entries()
3941 if (reg->num_entries > 1 || in qed_idle_chk_dump_rule_entries()
3942 reg->start_entry > 0) { in qed_idle_chk_dump_rule_entries()
3944 reg->entry_size > 1 ? in qed_idle_chk_dump_rule_entries()
3945 roundup_pow_of_two(reg->entry_size) : in qed_idle_chk_dump_rule_entries()
3947 addr += (reg->start_entry + entry_id) * in qed_idle_chk_dump_rule_entries()
3952 if (next_reg_offset + reg->entry_size >= in qed_idle_chk_dump_rule_entries()
3964 reg->entry_size, in qed_idle_chk_dump_rule_entries()
3972 if ((*cond_arr[rule->cond_id]) (cond_reg_values, in qed_idle_chk_dump_rule_entries()
3978 rule->rule_id, in qed_idle_chk_dump_rule_entries()
3997 &p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES]; in qed_idle_chk_dump()
4001 /* Dump global params - 1 must match below amount of params */ in qed_idle_chk_dump()
4006 dump, "dump-type", "idle-chk"); in qed_idle_chk_dump()
4013 while (input_offset < BYTES_TO_DWORDS(dbg_buf->size)) { in qed_idle_chk_dump()
4015 (const struct dbg_idle_chk_cond_hdr *)dbg_buf->ptr + in qed_idle_chk_dump()
4022 eval_mode = GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
4026 GET_FIELD(cond_hdr->mode.data, in qed_idle_chk_dump()
4035 dbg_buf->ptr in qed_idle_chk_dump()
4038 cond_hdr->data_size / IDLE_CHK_RULE_SIZE_DWORDS; in qed_idle_chk_dump()
4051 input_offset += cond_hdr->data_size; in qed_idle_chk_dump()
4066 * - trace_data_grc_addr (OUT): trace data GRC address in bytes
4067 * - trace_data_size (OUT): trace data size in bytes (without the header)
4101 * - running_bundle_id (OUT): running bundle ID (invalid when loaded from file)
4102 * - trace_meta_offset (OUT): trace meta offset in NVRAM in bytes (invalid when
4104 * - trace_meta_size (OUT): size in bytes of the trace meta data.
4212 dump, "dump-type", "mcp-trace"); in qed_mcp_trace_dump()
4254 * trace_meta_size_bytes is dword-aligned. in qed_mcp_trace_dump()
4309 dump, "dump-type", "reg-fifo"); in qed_reg_fifo_dump()
4379 dump, "dump-type", "igu-fifo"); in qed_igu_fifo_dump()
4449 dump, "dump-type", "protection-override"); in qed_protection_override_dump()
4495 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_fw_asserts_dump()
4507 dump, "dump-type", "fw-asserts"); in qed_fw_asserts_dump()
4515 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_fw_asserts_dump()
4524 storm_letter_str[0] = storm->letter; in qed_fw_asserts_dump()
4532 asserts->list_element_dword_size); in qed_fw_asserts_dump()
4536 offset += asserts->list_element_dword_size; in qed_fw_asserts_dump()
4540 addr = le16_to_cpu(asserts->section_ram_line_offset); in qed_fw_asserts_dump()
4541 fw_asserts_section_addr = storm->sem_fast_mem_addr + in qed_fw_asserts_dump()
4546 DWORDS_TO_BYTES(asserts->list_next_index_dword_offset); in qed_fw_asserts_dump()
4550 asserts->list_num_elements) - 1; in qed_fw_asserts_dump()
4552 asserts->list_dword_offset + in qed_fw_asserts_dump()
4553 last_list_idx * asserts->list_element_dword_size; in qed_fw_asserts_dump()
4558 asserts->list_element_dword_size, in qed_fw_asserts_dump()
4587 end_page_id = start_page_id + num_pages - 1; in qed_ilt_dump_pages_range()
4609 (offset + BYTES_TO_DWORDS(mem_desc->size) > in qed_ilt_dump_pages_range()
4611 if (offset + BYTES_TO_DWORDS(mem_desc->size) > in qed_ilt_dump_pages_range()
4614 buf_size_in_dwords - offset; in qed_ilt_dump_pages_range()
4616 mem_desc->virt_addr, in qed_ilt_dump_pages_range()
4626 mem_desc->virt_addr, mem_desc->size); in qed_ilt_dump_pages_range()
4627 offset += BYTES_TO_DWORDS(mem_desc->size); in qed_ilt_dump_pages_range()
4652 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump_pages_section()
4674 pf_start_line = p_hwfn->p_cxt_mngr->pf_start_line; in qed_ilt_dump_pages_section()
4698 * - PF pages - valid section (included in PF connection type mapping) in qed_ilt_dump_pages_section()
4699 * - PF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4700 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4701 * - VF pages - valid section (included in VF connection type mapping) in qed_ilt_dump_pages_section()
4702 * - VF pages - invalid section (not dumped) in qed_ilt_dump_pages_section()
4706 start_page_id = clients[ILT_CLI_CDUC].first.val - pf_start_line; in qed_ilt_dump_pages_section()
4715 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4726 * - PF init pages (not dumped) in qed_ilt_dump_pages_section()
4727 * - PF work pages in qed_ilt_dump_pages_section()
4728 * - For each VF in the PF: in qed_ilt_dump_pages_section()
4729 * - VF init pages (not dumped) in qed_ilt_dump_pages_section()
4730 * - VF work pages in qed_ilt_dump_pages_section()
4735 cdut_pf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4744 cdut_pf_pages + cdut_vf_init_pages - pf_start_line; in qed_ilt_dump_pages_section()
4745 for (i = 0; i < p_hwfn->p_cxt_mngr->vf_count; in qed_ilt_dump_pages_section()
4757 start_page_id = clients[ILT_CLI_SRC].first.val - pf_start_line; in qed_ilt_dump_pages_section()
4758 src_pages = clients[ILT_CLI_SRC].last.val - in qed_ilt_dump_pages_section()
4769 offset - base_data_offset : in qed_ilt_dump_pages_section()
4770 actual_dump_size_in_dwords - base_data_offset; in qed_ilt_dump_pages_section()
4775 actual_dump_size_in_dwords -= in qed_ilt_dump_pages_section()
4801 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump_dump_common_global_params()
4809 "dump-type", "ilt-dump"); in qed_ilt_dump_dump_common_global_params()
4812 "cduc-page-size", in qed_ilt_dump_dump_common_global_params()
4816 "cduc-first-page-id", in qed_ilt_dump_dump_common_global_params()
4820 "cduc-last-page-id", in qed_ilt_dump_dump_common_global_params()
4824 "cduc-num-pf-pages", in qed_ilt_dump_dump_common_global_params()
4828 "cduc-num-vf-pages", in qed_ilt_dump_dump_common_global_params()
4832 "max-conn-ctx-size", in qed_ilt_dump_dump_common_global_params()
4836 "cdut-page-size", in qed_ilt_dump_dump_common_global_params()
4840 "cdut-first-page-id", in qed_ilt_dump_dump_common_global_params()
4844 "cdut-last-page-id", in qed_ilt_dump_dump_common_global_params()
4848 "cdut-num-pf-init-pages", in qed_ilt_dump_dump_common_global_params()
4852 "cdut-num-vf-init-pages", in qed_ilt_dump_dump_common_global_params()
4856 "cdut-num-pf-work-pages", in qed_ilt_dump_dump_common_global_params()
4860 "cdut-num-vf-work-pages", in qed_ilt_dump_dump_common_global_params()
4864 "max-task-ctx-size", in qed_ilt_dump_dump_common_global_params()
4865 p_hwfn->p_cxt_mngr->task_ctx_size); in qed_ilt_dump_dump_common_global_params()
4868 "first-vf-id-in-pf", in qed_ilt_dump_dump_common_global_params()
4869 p_hwfn->p_cxt_mngr->first_vf_in_pf); in qed_ilt_dump_dump_common_global_params()
4872 "num-vfs-in-pf", in qed_ilt_dump_dump_common_global_params()
4873 p_hwfn->p_cxt_mngr->vf_count); in qed_ilt_dump_dump_common_global_params()
4876 "ptr-size-bytes", in qed_ilt_dump_dump_common_global_params()
4880 "pf-start-line", in qed_ilt_dump_dump_common_global_params()
4881 p_hwfn->p_cxt_mngr->pf_start_line); in qed_ilt_dump_dump_common_global_params()
4884 "page-mem-desc-size-dwords", in qed_ilt_dump_dump_common_global_params()
4888 "ilt-shadow-size", in qed_ilt_dump_dump_common_global_params()
4889 p_hwfn->p_cxt_mngr->ilt_shadow_size); in qed_ilt_dump_dump_common_global_params()
4894 dump, "dump-size-full", 0); in qed_ilt_dump_dump_common_global_params()
4900 "dump-size-actual", 0); in qed_ilt_dump_dump_common_global_params()
4904 p_hwfn->p_cxt_mngr->iscsi_task_pages); in qed_ilt_dump_dump_common_global_params()
4908 p_hwfn->p_cxt_mngr->fcoe_task_pages); in qed_ilt_dump_dump_common_global_params()
4912 p_hwfn->p_cxt_mngr->roce_task_pages); in qed_ilt_dump_dump_common_global_params()
4916 p_hwfn->p_cxt_mngr->eth_task_pages); in qed_ilt_dump_dump_common_global_params()
4919 "src-first-page-id", in qed_ilt_dump_dump_common_global_params()
4923 "src-last-page-id", in qed_ilt_dump_dump_common_global_params()
4927 "src-is-active", in qed_ilt_dump_dump_common_global_params()
4955 num_pf_cids = p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cid_count; in qed_ilt_dump_dump_num_pf_cids()
4983 p_hwfn->p_cxt_mngr->conn_cfg[conn_type].cids_per_vf; in qed_ilt_dump_dump_num_vf_cids()
4993 * buf_size_in_dwords - The dumped buffer size.
5001 struct qed_ilt_client_cfg *clients = p_hwfn->p_cxt_mngr->clients; in qed_ilt_dump()
5022 conn_ctx_size = p_hwfn->p_cxt_mngr->conn_ctx_size; in qed_ilt_dump()
5024 ilt_pages = p_hwfn->p_cxt_mngr->ilt_shadow; in qed_ilt_dump()
5032 buf_size_in_dwords -= last_section_size; in qed_ilt_dump()
5043 * section without dumping. if there is not enough memory - then in qed_ilt_dump()
5118 num_pages = p_hwfn->p_cxt_mngr->ilt_shadow_size; in qed_ilt_dump()
5189 "full-dump-size", offset + last_section_size); in qed_ilt_dump()
5192 "actual-dump-size", in qed_ilt_dump()
5233 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_read_fw_info()
5240 if (dev_data->block_in_reset[storm->sem_block_id]) in qed_read_fw_info()
5255 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_config()
5292 if (defs->is_persistent) in qed_dbg_grc_config()
5298 defs->exclude_all_preset_val; in qed_dbg_grc_config()
5301 defs->crash_preset_val[dev_data->chip_id]; in qed_dbg_grc_config()
5308 /* Regular param - set its value */ in qed_dbg_grc_config()
5318 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_grc_set_params_default()
5323 dev_data->grc.param_val[i] = in qed_dbg_grc_set_params_default()
5324 s_grc_param_defs[i].default_val[dev_data->chip_id]; in qed_dbg_grc_set_params_default()
5338 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_grc_get_dump_buf_size()
5339 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_REG].ptr || in qed_dbg_grc_get_dump_buf_size()
5340 !p_hwfn->dbg_arrays[BIN_BUF_DBG_DUMP_MEM].ptr || in qed_dbg_grc_get_dump_buf_size()
5341 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_grc_get_dump_buf_size()
5342 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_grc_get_dump_buf_size()
5384 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_idle_chk_get_dump_buf_size()
5385 struct idle_chk_data *idle_chk = &dev_data->idle_chk; in qed_dbg_idle_chk_get_dump_buf_size()
5394 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5395 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_REGS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5396 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_IMMS].ptr || in qed_dbg_idle_chk_get_dump_buf_size()
5397 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_RULES].ptr) in qed_dbg_idle_chk_get_dump_buf_size()
5400 if (!idle_chk->buf_size_set) { in qed_dbg_idle_chk_get_dump_buf_size()
5401 idle_chk->buf_size = qed_idle_chk_dump(p_hwfn, in qed_dbg_idle_chk_get_dump_buf_size()
5403 idle_chk->buf_size_set = true; in qed_dbg_idle_chk_get_dump_buf_size()
5406 *buf_size = idle_chk->buf_size; in qed_dbg_idle_chk_get_dump_buf_size()
5727 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_MODE_TREE].ptr || in qed_dbg_read_attn()
5728 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_BLOCKS].ptr || in qed_dbg_read_attn()
5729 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_REGS].ptr) in qed_dbg_read_attn()
5744 eval_mode = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5746 modes_buf_offset = GET_FIELD(reg_data->mode.data, in qed_dbg_read_attn()
5751 /* Mode match - read attention status register */ in qed_dbg_read_attn()
5753 reg_data->sts_clr_address : in qed_dbg_read_attn()
5754 GET_FIELD(reg_data->data, in qed_dbg_read_attn()
5760 /* Non-zero attention status - add to results */ in qed_dbg_read_attn()
5761 reg_result = &results->reg_results[num_result_regs]; in qed_dbg_read_attn()
5762 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5764 SET_FIELD(reg_result->data, in qed_dbg_read_attn()
5766 GET_FIELD(reg_data->data, DBG_ATTN_REG_NUM_REG_ATTN)); in qed_dbg_read_attn()
5767 reg_result->block_attn_offset = reg_data->block_attn_offset; in qed_dbg_read_attn()
5768 reg_result->sts_val = sts_val; in qed_dbg_read_attn()
5769 reg_result->mask_val = qed_rd(p_hwfn, in qed_dbg_read_attn()
5772 (reg_data->mask_address)); in qed_dbg_read_attn()
5776 results->block_id = (u8)block_id; in qed_dbg_read_attn()
5777 results->names_offset = in qed_dbg_read_attn()
5778 qed_get_block_attn_data(p_hwfn, block_id, attn_type)->names_offset; in qed_dbg_read_attn()
5779 SET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE, attn_type); in qed_dbg_read_attn()
5780 SET_FIELD(results->data, in qed_dbg_read_attn()
5923 (MCP_TRACE_FORMAT_P2_SIZE_OFFSET - MCP_TRACE_FORMAT_P1_SIZE_OFFSET)
5985 "Filters and triggers are not allowed in E4 256-bit mode",
6039 "NVRAM image is not dword-aligned",
6051 "Dump doesn't contain meta data - it must be provided in image file",
6087 "Non-matching debug lines - in E4, all lines must be of the same type (either 128b or 256b)",
6147 "Could not allocate MDUMP2 reg-val internal buffer"
6214 {4, "reserved address in block or write to read-only address"},
6256 {0x0, 0x101, "MSI-X Memory", NULL,
6308 return (size + a - b) % size; in qed_cyclic_sub()
6397 offset += (4 - (offset & 0x3)); in qed_read_param()
6402 offset += (4 - (offset & 0x3)); in qed_read_param()
6445 else if (strcmp(param_name, "fw-timestamp")) in qed_print_section_params()
6468 p_hwfn->dbg_arrays[BIN_BUF_DBG_BLOCKS_USER_DATA].ptr + block_id; in qed_dbg_get_block_name()
6470 return (const char *)block->name; in qed_dbg_get_block_name()
6476 return (struct dbg_tools_user_data *)p_hwfn->dbg_user_info; in qed_dbg_get_user_data()
6512 p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr + in qed_parse_idle_chk_dump_rules()
6513 hdr->rule_id; in qed_parse_idle_chk_dump_rules()
6515 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6518 GET_FIELD(rule_parsing_data->data, in qed_parse_idle_chk_dump_rules()
6521 p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr + in qed_parse_idle_chk_dump_rules()
6526 if (hdr->severity >= MAX_DBG_IDLE_CHK_SEVERITY_TYPES) in qed_parse_idle_chk_dump_rules()
6533 if (hdr->severity == IDLE_CHK_SEVERITY_ERROR || in qed_parse_idle_chk_dump_rules()
6534 hdr->severity == IDLE_CHK_SEVERITY_ERROR_NO_TRAFFIC) in qed_parse_idle_chk_dump_rules()
6543 s_idle_chk_severity_str[hdr->severity]); in qed_parse_idle_chk_dump_rules()
6560 i < hdr->num_dumped_cond_regs + hdr->num_dumped_info_regs; in qed_parse_idle_chk_dump_rules()
6568 is_mem = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6570 reg_id = GET_FIELD(reg_hdr->data, in qed_parse_idle_chk_dump_rules()
6586 if (i < hdr->num_dumped_cond_regs && is_mem) in qed_parse_idle_chk_dump_rules()
6590 "[%d]", hdr->mem_entry_id + in qed_parse_idle_chk_dump_rules()
6591 reg_hdr->start_entry); in qed_parse_idle_chk_dump_rules()
6595 for (j = 0; j < reg_hdr->size; j++, dump_buf++) { in qed_parse_idle_chk_dump_rules()
6600 if (j < reg_hdr->size - 1) in qed_parse_idle_chk_dump_rules()
6644 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr || in qed_parse_idle_chk_dump()
6645 !p_hwfn->dbg_arrays[BIN_BUF_DBG_IDLE_CHK_PARSING_DATA].ptr) in qed_parse_idle_chk_dump()
6661 * - 1st is "num_rules" in qed_parse_idle_chk_dump()
6662 * - 2nd is "num_rules_not_dumped" (optional) in qed_parse_idle_chk_dump()
6777 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_alloc_meta_data()
6781 if (meta->is_allocated) in qed_mcp_trace_alloc_meta_data()
6792 meta->modules_num = qed_read_byte_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6793 meta->modules = kcalloc(meta->modules_num, sizeof(char *), in qed_mcp_trace_alloc_meta_data()
6795 if (!meta->modules) in qed_mcp_trace_alloc_meta_data()
6799 for (i = 0; i < meta->modules_num; i++) { in qed_mcp_trace_alloc_meta_data()
6802 *(meta->modules + i) = kzalloc(module_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6803 if (!(*(meta->modules + i))) { in qed_mcp_trace_alloc_meta_data()
6805 meta->modules_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6810 *(meta->modules + i)); in qed_mcp_trace_alloc_meta_data()
6812 (*(meta->modules + i))[MCP_TRACE_MAX_MODULE_LEN] = '\0'; in qed_mcp_trace_alloc_meta_data()
6821 meta->formats_num = qed_read_dword_from_buf(meta_buf_bytes, &offset); in qed_mcp_trace_alloc_meta_data()
6822 meta->formats = kcalloc(meta->formats_num, in qed_mcp_trace_alloc_meta_data()
6825 if (!meta->formats) in qed_mcp_trace_alloc_meta_data()
6829 for (i = 0; i < meta->formats_num; i++) { in qed_mcp_trace_alloc_meta_data()
6830 struct mcp_trace_format *format_ptr = &meta->formats[i]; in qed_mcp_trace_alloc_meta_data()
6833 format_ptr->data = qed_read_dword_from_buf(meta_buf_bytes, in qed_mcp_trace_alloc_meta_data()
6835 format_len = GET_MFW_FIELD(format_ptr->data, in qed_mcp_trace_alloc_meta_data()
6837 format_ptr->format_str = kzalloc(format_len, GFP_KERNEL); in qed_mcp_trace_alloc_meta_data()
6838 if (!format_ptr->format_str) { in qed_mcp_trace_alloc_meta_data()
6840 meta->formats_num = i ? i - 1 : 0; in qed_mcp_trace_alloc_meta_data()
6846 format_len, format_ptr->format_str); in qed_mcp_trace_alloc_meta_data()
6849 meta->is_allocated = true; in qed_mcp_trace_alloc_meta_data()
6856 * trace_buf - MCP trace cyclic buffer
6857 * trace_buf_size - MCP trace cyclic buffer size in bytes
6858 * data_offset - offset in bytes of the data to parse in the MCP trace cyclic
6860 * data_size - size in bytes of data to parse.
6861 * parsed_buf - destination buffer for parsed data.
6862 * parsed_results_bytes - size of parsed data in bytes.
6878 meta = &dev_user_data->mcp_trace_meta; in qed_parse_mcp_trace_buf()
6881 if (!meta->is_allocated) in qed_parse_mcp_trace_buf()
6899 data_size -= MFW_TRACE_ENTRY_SIZE; in qed_parse_mcp_trace_buf()
6903 if (format_idx >= meta->formats_num) { in qed_parse_mcp_trace_buf()
6913 data_size -= format_size; in qed_parse_mcp_trace_buf()
6917 format_ptr = &meta->formats[format_idx]; in qed_parse_mcp_trace_buf()
6926 u8 param_size = (u8)((format_ptr->data & param_mask) >> in qed_parse_mcp_trace_buf()
6948 data_size -= param_size; in qed_parse_mcp_trace_buf()
6951 format_level = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6953 format_module = (u8)GET_MFW_FIELD(format_ptr->data, in qed_parse_mcp_trace_buf()
6962 "%s %-8s: ", in qed_parse_mcp_trace_buf()
6964 meta->modules[format_module]); in qed_parse_mcp_trace_buf()
6967 format_ptr->format_str, in qed_parse_mcp_trace_buf()
7024 if (trace->signature != MFW_TRACE_SIGNATURE || !trace->size) in qed_parse_mcp_trace_dump()
7028 offset = trace->trace_oldest; in qed_parse_mcp_trace_dump()
7029 data_size = qed_cyclic_sub(trace->trace_prod, offset, trace->size); in qed_parse_mcp_trace_dump()
7049 if (!dev_user_data->mcp_trace_user_meta_buf) in qed_parse_mcp_trace_dump()
7052 meta_buf = dev_user_data->mcp_trace_user_meta_buf; in qed_parse_mcp_trace_dump()
7065 trace->size, in qed_parse_mcp_trace_dump()
7146 …0x%016llx, address: 0x%07x, access: %-5s, pf: %2d, vf: %s, port: %d, privilege: %-3s, protection: … in qed_parse_reg_fifo_dump()
7194 dword12 = ((u64)element->dword2 << 32) | element->dword1; in qed_parse_igu_fifo_element()
7196 is_pf = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_IS_PF); in qed_parse_igu_fifo_element()
7197 cmd_addr = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_CMD_ADDR); in qed_parse_igu_fifo_element()
7198 source = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_SOURCE); in qed_parse_igu_fifo_element()
7199 err_type = GET_FIELD(element->dword0, IGU_FIFO_ELEMENT_DWORD0_ERR_TYPE); in qed_parse_igu_fifo_element()
7211 if (cmd_addr >= curr_addr->start_addr && cmd_addr <= in qed_parse_igu_fifo_element()
7212 curr_addr->end_addr) in qed_parse_igu_fifo_element()
7220 switch (found_addr->type) { in qed_parse_igu_fifo_element()
7227 " SB = 0x%x", cmd_addr - found_addr->start_addr); in qed_parse_igu_fifo_element()
7290 element->dword2, element->dword1, in qed_parse_igu_fifo_element()
7291 element->dword0, in qed_parse_igu_fifo_element()
7293 GET_FIELD(element->dword0, in qed_parse_igu_fifo_element()
7298 (!is_pf && found_addr->vf_desc) in qed_parse_igu_fifo_element()
7299 ? found_addr->vf_desc in qed_parse_igu_fifo_element()
7300 : found_addr->desc, in qed_parse_igu_fifo_element()
7414 …s: 0x%07x, size: %7d regs, read: %d, write: %d, read protection: %-12s, write protection: %-12s\n", in qed_parse_protection_override_dump()
7589 dev_user_data->mcp_trace_user_meta_buf = meta_buf; in qed_dbg_mcp_trace_set_meta_data()
7649 meta = &dev_user_data->mcp_trace_meta; in qed_mcp_trace_free_meta_data()
7650 if (!meta->is_allocated) in qed_mcp_trace_free_meta_data()
7654 if (meta->modules) { in qed_mcp_trace_free_meta_data()
7655 for (i = 0; i < meta->modules_num; i++) in qed_mcp_trace_free_meta_data()
7656 kfree(meta->modules[i]); in qed_mcp_trace_free_meta_data()
7657 kfree(meta->modules); in qed_mcp_trace_free_meta_data()
7661 if (meta->formats) { in qed_mcp_trace_free_meta_data()
7662 for (i = 0; i < meta->formats_num; i++) in qed_mcp_trace_free_meta_data()
7663 kfree(meta->formats[i].format_str); in qed_mcp_trace_free_meta_data()
7664 kfree(meta->formats); in qed_mcp_trace_free_meta_data()
7667 meta->is_allocated = false; in qed_mcp_trace_free_meta_data()
7756 num_regs = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_NUM_REGS); in qed_dbg_parse_attn()
7757 attn_type = GET_FIELD(results->data, DBG_ATTN_BLOCK_RESULT_ATTN_TYPE); in qed_dbg_parse_attn()
7758 block_name = qed_dbg_get_block_name(p_hwfn, results->block_id); in qed_dbg_parse_attn()
7762 if (!p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr || in qed_dbg_parse_attn()
7763 !p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr || in qed_dbg_parse_attn()
7764 !p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr) in qed_dbg_parse_attn()
7768 (u32 *)p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_NAME_OFFSETS].ptr + in qed_dbg_parse_attn()
7769 results->names_offset; in qed_dbg_parse_attn()
7771 attn_name_base = p_hwfn->dbg_arrays[BIN_BUF_DBG_PARSING_STRINGS].ptr; in qed_dbg_parse_attn()
7773 /* Go over registers with a non-zero attention status */ in qed_dbg_parse_attn()
7779 reg_result = &results->reg_results[i]; in qed_dbg_parse_attn()
7780 num_reg_attn = GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7783 p_hwfn->dbg_arrays[BIN_BUF_DBG_ATTN_INDEXES].ptr + in qed_dbg_parse_attn()
7784 reg_result->block_attn_offset; in qed_dbg_parse_attn()
7804 if (reg_result->sts_val & BIT(bit_idx)) { in qed_dbg_parse_attn()
7815 masked_str = reg_result->mask_val & in qed_dbg_parse_attn()
7819 GET_FIELD(reg_result->data, in qed_dbg_parse_attn()
7923 u32 i, precision = 80; in qed_dbg_print_feature() local
7928 pr_notice("\n%.*s", precision, p_text_buf); in qed_dbg_print_feature()
7929 for (i = precision; i < text_size; i += precision) in qed_dbg_print_feature()
7930 pr_cont("%.*s", precision, p_text_buf + i); in qed_dbg_print_feature()
7940 &p_hwfn->cdev->dbg_features[feature_idx]; in format_feature()
7950 dbuf = (u32 *)feature->dump_buf; in format_feature()
7951 dwords = feature->dumped_dwords; in format_feature()
7964 null_char_pos = txt_size_bytes - 1; in format_feature()
7968 DP_NOTICE(p_hwfn->cdev, in format_feature()
7977 DP_NOTICE(p_hwfn->cdev, in format_feature()
8000 if (p_hwfn->cdev->print_dbg_data) in format_feature()
8004 if (p_hwfn->cdev->dbg_bin_dump) { in format_feature()
8012 vfree(feature->dump_buf); in format_feature()
8013 feature->dump_buf = text_buf; in format_feature()
8014 feature->buf_size = txt_size_bytes; in format_feature()
8015 feature->dumped_dwords = txt_size_bytes / 4; in format_feature()
8028 &p_hwfn->cdev->dbg_features[feature_idx]; in qed_dbg_dump()
8032 DP_NOTICE(p_hwfn->cdev, "Collecting a debug feature [\"%s\"]\n", in qed_dbg_dump()
8039 if (feature->dump_buf) { in qed_dbg_dump()
8040 vfree(feature->dump_buf); in qed_dbg_dump()
8041 feature->dump_buf = NULL; in qed_dbg_dump()
8053 feature->buf_size = 0; in qed_dbg_dump()
8054 DP_NOTICE(p_hwfn->cdev, in qed_dbg_dump()
8062 feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_dump()
8063 feature->dump_buf = vmalloc(feature->buf_size); in qed_dbg_dump()
8064 if (!feature->dump_buf) in qed_dbg_dump()
8067 dbuf = (u32 *)feature->dump_buf; in qed_dbg_dump()
8068 dwords = &feature->dumped_dwords; in qed_dbg_dump()
8071 feature->buf_size / in qed_dbg_dump()
8156 &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_nvm_image()
8165 DP_NOTICE(p_hwfn->cdev, in qed_dbg_nvm_image()
8289 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data()
8290 struct dbg_tools_data *dev_data = &p_hwfn->dbg_info; in qed_dbg_all_data()
8295 grc_params[i] = dev_data->grc.param_val[i]; in qed_dbg_all_data()
8300 cdev->dbg_bin_dump = 1; in qed_dbg_all_data()
8304 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data()
8319 cdev->dbg_bin_dump); in qed_dbg_all_data()
8334 cdev->dbg_bin_dump); in qed_dbg_all_data()
8349 cdev->dbg_bin_dump); in qed_dbg_all_data()
8364 cdev->dbg_bin_dump); in qed_dbg_all_data()
8381 cdev->dbg_bin_dump); in qed_dbg_all_data()
8398 cdev->dbg_bin_dump); in qed_dbg_all_data()
8406 if (!cdev->disable_ilt_dump && feature_size < in qed_dbg_all_data()
8416 cdev->dbg_bin_dump); in qed_dbg_all_data()
8424 /* Grc dump - must be last because when mcp stuck it will in qed_dbg_all_data()
8428 dev_data->grc.param_val[i] = grc_params[i]; in qed_dbg_all_data()
8438 cdev->dbg_bin_dump); in qed_dbg_all_data()
8454 cdev->dbg_bin_dump); in qed_dbg_all_data()
8469 cdev->dbg_bin_dump); in qed_dbg_all_data()
8471 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8488 cdev->dbg_bin_dump); in qed_dbg_all_data()
8490 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8506 cdev->dbg_bin_dump); in qed_dbg_all_data()
8508 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8523 cdev->dbg_bin_dump); in qed_dbg_all_data()
8525 } else if (rc != -ENOENT) { in qed_dbg_all_data()
8532 cdev->dbg_bin_dump = 0; in qed_dbg_all_data()
8540 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_all_data_size()
8543 cdev->disable_ilt_dump = false; in qed_dbg_all_data_size()
8545 for (cur_engine = 0; cur_engine < cdev->num_hwfns; cur_engine++) { in qed_dbg_all_data_size()
8587 cdev->disable_ilt_dump = true; in qed_dbg_all_data_size()
8588 regs_len -= total_ilt_len; in qed_dbg_all_data_size()
8597 struct qed_dbg_feature *qed_feature = &cdev->dbg_features[feature]; in qed_dbg_feature()
8598 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature()
8606 return -EINVAL; in qed_dbg_feature()
8614 rc = -EINVAL; in qed_dbg_feature()
8620 memcpy(buffer, qed_feature->dump_buf, qed_feature->buf_size); in qed_dbg_feature()
8621 *num_dumped_bytes = cdev->dbg_features[feature].dumped_dwords * in qed_dbg_feature()
8631 struct qed_dbg_feature *qed_feature = &cdev->dbg_features[feature]; in qed_dbg_feature_size()
8632 struct qed_hwfn *p_hwfn = &cdev->hwfns[cdev->engine_for_debug]; in qed_dbg_feature_size()
8638 return -EINVAL; in qed_dbg_feature_size()
8650 qed_feature->buf_size = buf_size_dwords * sizeof(u32); in qed_dbg_feature_size()
8651 return qed_feature->buf_size; in qed_dbg_feature_size()
8664 return cdev->engine_for_debug; in qed_get_debug_engine()
8671 cdev->engine_for_debug = engine_number; in qed_set_debug_engine()
8685 dbg_values = cdev->firmware->data + *(u32 *)cdev->firmware->data; in qed_dbg_pf_init()
8688 qed_dbg_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8689 qed_dbg_user_set_bin_ptr(&cdev->hwfns[i], dbg_values); in qed_dbg_pf_init()
8693 cdev->engine_for_debug = 0; in qed_dbg_pf_init()
8705 feature = &cdev->dbg_features[feature_idx]; in qed_dbg_pf_exit()
8706 if (feature->dump_buf) { in qed_dbg_pf_exit()
8707 vfree(feature->dump_buf); in qed_dbg_pf_exit()
8708 feature->dump_buf = NULL; in qed_dbg_pf_exit()