Merge "msm: camera: isp: Add debugfs support for SFE driver" into camera-kernel.lnx.5.0
Este commit está contenido en:

cometido por
Gerrit - the friendly Code Review server

commit
d94ee28414
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
Referencia en una nueva incidencia
Block a user