You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
qed: Add support for debug data collection
This patch adds the support for dumping and formatting the HW/FW debug data. Signed-off-by: Tomer Tayar <Tomer.Tayar@qlogic.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
936f0600de
commit
c965db4446
@@ -2,5 +2,5 @@ obj-$(CONFIG_QED) := qed.o
|
||||
|
||||
qed-y := qed_cxt.o qed_dev.o qed_hw.o qed_init_fw_funcs.o qed_init_ops.o \
|
||||
qed_int.o qed_main.o qed_mcp.o qed_sp_commands.o qed_spq.o qed_l2.o \
|
||||
qed_selftest.o qed_dcbx.o
|
||||
qed_selftest.o qed_dcbx.o qed_debug.o
|
||||
qed-$(CONFIG_QED_SRIOV) += qed_sriov.o qed_vf.o
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/zlib.h>
|
||||
#include <linux/hashtable.h>
|
||||
#include <linux/qed/qed_if.h>
|
||||
#include "qed_debug.h"
|
||||
#include "qed_hsi.h"
|
||||
|
||||
extern const struct qed_common_ops qed_common_ops_pass;
|
||||
@@ -395,6 +396,8 @@ struct qed_hwfn {
|
||||
/* Buffer for unzipping firmware data */
|
||||
void *unzip_buf;
|
||||
|
||||
struct dbg_tools_data dbg_info;
|
||||
|
||||
struct qed_simd_fp_handler simd_proto_handler[64];
|
||||
|
||||
#ifdef CONFIG_QED_SRIOV
|
||||
@@ -430,6 +433,19 @@ struct qed_int_params {
|
||||
u8 fp_msix_cnt;
|
||||
};
|
||||
|
||||
struct qed_dbg_feature {
|
||||
struct dentry *dentry;
|
||||
u8 *dump_buf;
|
||||
u32 buf_size;
|
||||
u32 dumped_dwords;
|
||||
};
|
||||
|
||||
struct qed_dbg_params {
|
||||
struct qed_dbg_feature features[DBG_FEATURE_NUM];
|
||||
u8 engine_for_debug;
|
||||
bool print_data;
|
||||
};
|
||||
|
||||
struct qed_dev {
|
||||
u32 dp_module;
|
||||
u8 dp_level;
|
||||
@@ -444,6 +460,8 @@ struct qed_dev {
|
||||
CHIP_REV_IS_A0(dev))
|
||||
#define QED_IS_BB_B0(dev) (QED_IS_BB(dev) && \
|
||||
CHIP_REV_IS_B0(dev))
|
||||
#define QED_IS_AH(dev) ((dev)->type == QED_DEV_TYPE_AH)
|
||||
#define QED_IS_K2(dev) QED_IS_AH(dev)
|
||||
|
||||
#define QED_GET_TYPE(dev) (QED_IS_BB_A0(dev) ? CHIP_BB_A0 : \
|
||||
QED_IS_BB_B0(dev) ? CHIP_BB_B0 : CHIP_K2)
|
||||
@@ -544,6 +562,8 @@ struct qed_dev {
|
||||
} protocol_ops;
|
||||
void *ops_cookie;
|
||||
|
||||
struct qed_dbg_params dbg_params;
|
||||
|
||||
const struct firmware *firmware;
|
||||
};
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
||||
/* QLogic qed NIC Driver
|
||||
* Copyright (c) 2015 QLogic Corporation
|
||||
*
|
||||
* This software is available under the terms of the GNU General Public License
|
||||
* (GPL) Version 2, available from the file COPYING in the main directory of
|
||||
* this source tree.
|
||||
*/
|
||||
|
||||
#ifndef _QED_DEBUGFS_H
|
||||
#define _QED_DEBUGFS_H
|
||||
|
||||
enum qed_dbg_features {
|
||||
DBG_FEATURE_GRC,
|
||||
DBG_FEATURE_IDLE_CHK,
|
||||
DBG_FEATURE_MCP_TRACE,
|
||||
DBG_FEATURE_REG_FIFO,
|
||||
DBG_FEATURE_IGU_FIFO,
|
||||
DBG_FEATURE_PROTECTION_OVERRIDE,
|
||||
DBG_FEATURE_FW_ASSERTS,
|
||||
DBG_FEATURE_NUM
|
||||
};
|
||||
|
||||
int qed_dbg_grc(struct qed_dev *cdev, void *buffer, u32 *num_dumped_bytes);
|
||||
int qed_dbg_grc_size(struct qed_dev *cdev);
|
||||
int qed_dbg_idle_chk(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_idle_chk_size(struct qed_dev *cdev);
|
||||
int qed_dbg_reg_fifo(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_reg_fifo_size(struct qed_dev *cdev);
|
||||
int qed_dbg_igu_fifo(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_igu_fifo_size(struct qed_dev *cdev);
|
||||
int qed_dbg_protection_override(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_protection_override_size(struct qed_dev *cdev);
|
||||
int qed_dbg_fw_asserts(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_fw_asserts_size(struct qed_dev *cdev);
|
||||
int qed_dbg_mcp_trace(struct qed_dev *cdev, void *buffer,
|
||||
u32 *num_dumped_bytes);
|
||||
int qed_dbg_mcp_trace_size(struct qed_dev *cdev);
|
||||
int qed_dbg_all_data(struct qed_dev *cdev, void *buffer);
|
||||
int qed_dbg_all_data_size(struct qed_dev *cdev);
|
||||
u8 qed_get_debug_engine(struct qed_dev *cdev);
|
||||
void qed_set_debug_engine(struct qed_dev *cdev, int engine_number);
|
||||
int qed_dbg_feature(struct qed_dev *cdev, void *buffer,
|
||||
enum qed_dbg_features feature, u32 *num_dumped_bytes);
|
||||
int qed_dbg_feature_size(struct qed_dev *cdev, enum qed_dbg_features feature);
|
||||
|
||||
void qed_dbg_pf_init(struct qed_dev *cdev);
|
||||
void qed_dbg_pf_exit(struct qed_dev *cdev);
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -588,6 +588,8 @@ static int qed_nic_stop(struct qed_dev *cdev)
|
||||
}
|
||||
}
|
||||
|
||||
qed_dbg_pf_exit(cdev);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -846,6 +848,8 @@ static int qed_slowpath_start(struct qed_dev *cdev,
|
||||
|
||||
/* First Dword used to diffrentiate between various sources */
|
||||
data = cdev->firmware->data + sizeof(u32);
|
||||
|
||||
qed_dbg_pf_init(cdev);
|
||||
}
|
||||
|
||||
memset(&tunn_info, 0, sizeof(tunn_info));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -143,6 +143,9 @@
|
||||
#define GTT_BYTE_SIZE_BITS (GTT_DWORD_SIZE_BITS + 2)
|
||||
#define GTT_DWORD_SIZE BIT(GTT_DWORD_SIZE_BITS)
|
||||
|
||||
/* Tools Version */
|
||||
#define TOOLS_VERSION 10
|
||||
|
||||
/*****************/
|
||||
/* CDU CONSTANTS */
|
||||
/*****************/
|
||||
|
||||
Reference in New Issue
Block a user