Merge "msm: camera: isp: Add debugfs support for SFE driver" into camera-kernel.lnx.5.0

Este commit está contenido en:
Camera Software Integration
2021-04-28 21:23:17 -07:00
cometido por Gerrit - the friendly Code Review server
Se han modificado 5 ficheros con 95 adiciones y 10 borrados

Ver fichero

@@ -6215,6 +6215,21 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args)
}
}
/* set current SFE debug information to SFE HW */
for (i = 0; i < CAM_SFE_HW_NUM_MAX; i++) {
struct cam_sfe_debug_cfg_params debug_cfg;
debug_cfg.sfe_debug_cfg = g_ife_hw_mgr.debug_cfg.sfe_debug;
debug_cfg.sfe_sensor_sel = g_ife_hw_mgr.debug_cfg.sfe_sensor_diag_cfg;
if (g_ife_hw_mgr.sfe_devices[i]) {
rc = g_ife_hw_mgr.sfe_devices[i]->hw_ops.process_cmd(
g_ife_hw_mgr.sfe_devices[i]->hw_priv,
CAM_ISP_HW_CMD_SET_SFE_DEBUG_CFG,
&debug_cfg,
sizeof(debug_cfg));
}
}
if (ctx->flags.need_csid_top_cfg) {
list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_csid,
list) {
@@ -11099,6 +11114,47 @@ DEFINE_SIMPLE_ATTRIBUTE(cam_ife_camif_debug,
cam_ife_get_camif_debug,
cam_ife_set_camif_debug, "%16llu");
static int cam_ife_set_sfe_debug(void *data, u64 val)
{
g_ife_hw_mgr.debug_cfg.sfe_debug = (uint32_t)val;
CAM_DBG(CAM_ISP, "Set SFE Debug value :%u",
g_ife_hw_mgr.debug_cfg.sfe_debug);
return 0;
}
static int cam_ife_get_sfe_debug(void *data, u64 *val)
{
*val = (uint64_t)g_ife_hw_mgr.debug_cfg.sfe_debug;
CAM_DBG(CAM_ISP, "Get SFE Debug value :%u",
g_ife_hw_mgr.debug_cfg.sfe_debug);
return 0;
}
DEFINE_DEBUGFS_ATTRIBUTE(cam_ife_sfe_debug,
cam_ife_get_sfe_debug,
cam_ife_set_sfe_debug, "%16llu");
static int cam_ife_set_sfe_sensor_diag_debug(void *data, u64 val)
{
g_ife_hw_mgr.debug_cfg.sfe_sensor_diag_cfg = (uint32_t)val;
CAM_DBG(CAM_ISP, "Set SFE Sensor diag value :%u",
g_ife_hw_mgr.debug_cfg.sfe_sensor_diag_cfg);
return 0;
}
static int cam_ife_get_sfe_sensor_diag_debug(void *data, u64 *val)
{
*val = (uint64_t)g_ife_hw_mgr.debug_cfg.sfe_sensor_diag_cfg;
CAM_DBG(CAM_ISP, "Get SFE Sensor diag value :%u",
g_ife_hw_mgr.debug_cfg.sfe_sensor_diag_cfg);
return 0;
}
DEFINE_DEBUGFS_ATTRIBUTE(cam_ife_sfe_sensor_diag_debug,
cam_ife_get_sfe_sensor_diag_debug,
cam_ife_set_sfe_sensor_diag_debug, "%16llu");
static int cam_ife_hw_mgr_debug_register(void)
{
int rc = 0;
@@ -11131,6 +11187,10 @@ static int cam_ife_hw_mgr_debug_register(void)
dbgfileptr = debugfs_create_bool("disable_ubwc_comp", 0644,
g_ife_hw_mgr.debug_cfg.dentry,
&g_ife_hw_mgr.debug_cfg.disable_ubwc_comp);
dbgfileptr = debugfs_create_file("sfe_debug", 0644,
g_ife_hw_mgr.debug_cfg.dentry, NULL, &cam_ife_sfe_debug);
dbgfileptr = debugfs_create_file("sfe_sensor_diag_sel", 0644,
g_ife_hw_mgr.debug_cfg.dentry, NULL, &cam_ife_sfe_sensor_diag_debug);
if (IS_ERR(dbgfileptr)) {
if (PTR_ERR(dbgfileptr) == -ENODEV)

Ver fichero

@@ -45,7 +45,8 @@ enum cam_ife_ctx_master_type {
* @csid_debug: csid debug information
* @enable_recovery: enable recovery
* @enable_csid_recovery: enable csid recovery
* @enable_diag_sensor_status: enable sensor diagnosis status
* @sfe_debug: sfe debug config
* @sfe_sensor_diag_cfg: sfe sensor diag config
* @enable_req_dump: Enable request dump on HW errors
* @per_req_reg_dump: Enable per request reg dump
* @disable_ubwc_comp: Disable UBWC compression
@@ -57,6 +58,8 @@ struct cam_ife_hw_mgr_debug {
uint32_t enable_recovery;
uint32_t camif_debug;
uint32_t enable_csid_recovery;
uint32_t sfe_debug;
uint32_t sfe_sensor_diag_cfg;
bool enable_req_dump;
bool per_req_reg_dump;
bool disable_ubwc_comp;

Ver fichero

@@ -935,6 +935,10 @@ static int cam_sfe_bus_start_bus_rd(
for (i = 0; i < rsrc_data->num_rm; i++)
rc = cam_sfe_bus_start_rm(rsrc_data->rm_res[i]);
/* Remove after driver stabilizes */
common_data->sfe_debug_cfg |=
SFE_DEBUG_ENABLE_RD_DONE_IRQ;
if (common_data->sfe_debug_cfg &
SFE_DEBUG_ENABLE_RD_DONE_IRQ) {
@@ -1340,12 +1344,12 @@ static int cam_sfe_bus_rd_set_debug_cfg(
struct cam_sfe_debug_cfg_params *debug_cfg;
debug_cfg = (struct cam_sfe_debug_cfg_params *)cmd_args;
bus_priv->common_data.sfe_debug_cfg =
debug_cfg->sfe_debug_cfg;
bus_priv->common_data.sfe_debug_cfg = debug_cfg->sfe_debug_cfg;
return 0;
}
static int cam_sfe_bus_rd_process_cmd(
void *priv, uint32_t cmd_type,
void *cmd_args, uint32_t arg_size)
@@ -1478,10 +1482,8 @@ int cam_sfe_bus_rd_init(
sfe_bus_local->hw_ops.process_cmd = cam_sfe_bus_rd_process_cmd;
*sfe_bus = sfe_bus_local;
bus_priv->common_data.sfe_debug_cfg = 0;
/* Remove after driver stabilizes */
bus_priv->common_data.sfe_debug_cfg |=
SFE_DEBUG_ENABLE_RD_DONE_IRQ;
return rc;
deinit_sfe_bus_rd:

Ver fichero

@@ -91,6 +91,8 @@ struct cam_sfe_bus_wr_common_data {
uint32_t line_done_cfg;
bool err_irq_subscribe;
cam_hw_mgr_event_cb_func event_cb;
uint32_t sfe_debug_cfg;
};
struct cam_sfe_wr_scratch_buf_info {
@@ -2584,6 +2586,19 @@ static int __cam_sfe_bus_wr_process_cmd(
cmd_args, arg_size);
}
static int cam_sfe_bus_wr_set_debug_cfg(
void *priv, void *cmd_args)
{
struct cam_sfe_bus_wr_priv *bus_priv =
(struct cam_sfe_bus_wr_priv *) priv;
struct cam_sfe_debug_cfg_params *debug_cfg;
debug_cfg = (struct cam_sfe_debug_cfg_params *)cmd_args;
bus_priv->common_data.sfe_debug_cfg = debug_cfg->sfe_debug_cfg;
return 0;
}
static int cam_sfe_bus_wr_process_cmd(
struct cam_isp_resource_node *priv,
uint32_t cmd_type, void *cmd_args,
@@ -2642,6 +2657,9 @@ static int cam_sfe_bus_wr_process_cmd(
rc = 0;
}
break;
case CAM_ISP_HW_CMD_SET_SFE_DEBUG_CFG:
rc = cam_sfe_bus_wr_set_debug_cfg(priv, cmd_args);
break;
default:
CAM_ERR_RATE_LIMIT(CAM_SFE, "Invalid HW command type:%d",
cmd_type);
@@ -2735,7 +2753,7 @@ int cam_sfe_bus_wr_init(
false);
if (rc) {
CAM_ERR(CAM_SFE, "Init bus_irq_controller failed");
goto free_bus_priv;
goto free_sfe_out;
}
INIT_LIST_HEAD(&bus_priv->free_comp_grp);
@@ -2798,6 +2816,8 @@ deinit_comp_grp:
i = bus_priv->num_comp_grp;
for (--i; i >= 0; i--)
cam_sfe_bus_deinit_comp_grp(&bus_priv->comp_grp[i]);
free_sfe_out:
kfree(bus_priv->sfe_out);
free_comp_grp:

Ver fichero

@@ -1493,6 +1493,9 @@ int cam_sfe_top_start(
}
}
/* Remove after driver stabilizes */
top_priv->sfe_debug_cfg |= SFE_DEBUG_ENABLE_SOF_EOF_IRQ;
if ((top_priv->sfe_debug_cfg & SFE_DEBUG_ENABLE_SOF_EOF_IRQ) ||
(debug_cfg_enabled)) {
if (!path_data->sof_eof_handle) {
@@ -1734,9 +1737,6 @@ int cam_sfe_top_init(
top_priv->wr_client_desc = sfe_top_hw_info->wr_client_desc;
top_priv->sfe_debug_cfg = 0;
/* Remove after driver stabilizes */
top_priv->sfe_debug_cfg |= SFE_DEBUG_ENABLE_SOF_EOF_IRQ;
sfe_top->hw_ops.process_cmd = cam_sfe_top_process_cmd;
sfe_top->hw_ops.start = cam_sfe_top_start;
sfe_top->hw_ops.stop = cam_sfe_top_stop;