Merge "msm: camera: isp: Add debugfs support for SFE driver" into camera-kernel.lnx.5.0
This commit is contained in:

committed by
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) {
|
if (ctx->flags.need_csid_top_cfg) {
|
||||||
list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_csid,
|
list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_csid,
|
||||||
list) {
|
list) {
|
||||||
@@ -11099,6 +11114,47 @@ DEFINE_SIMPLE_ATTRIBUTE(cam_ife_camif_debug,
|
|||||||
cam_ife_get_camif_debug,
|
cam_ife_get_camif_debug,
|
||||||
cam_ife_set_camif_debug, "%16llu");
|
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)
|
static int cam_ife_hw_mgr_debug_register(void)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -11131,6 +11187,10 @@ static int cam_ife_hw_mgr_debug_register(void)
|
|||||||
dbgfileptr = debugfs_create_bool("disable_ubwc_comp", 0644,
|
dbgfileptr = debugfs_create_bool("disable_ubwc_comp", 0644,
|
||||||
g_ife_hw_mgr.debug_cfg.dentry,
|
g_ife_hw_mgr.debug_cfg.dentry,
|
||||||
&g_ife_hw_mgr.debug_cfg.disable_ubwc_comp);
|
&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 (IS_ERR(dbgfileptr)) {
|
||||||
if (PTR_ERR(dbgfileptr) == -ENODEV)
|
if (PTR_ERR(dbgfileptr) == -ENODEV)
|
||||||
|
@@ -45,7 +45,8 @@ enum cam_ife_ctx_master_type {
|
|||||||
* @csid_debug: csid debug information
|
* @csid_debug: csid debug information
|
||||||
* @enable_recovery: enable recovery
|
* @enable_recovery: enable recovery
|
||||||
* @enable_csid_recovery: enable csid 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
|
* @enable_req_dump: Enable request dump on HW errors
|
||||||
* @per_req_reg_dump: Enable per request reg dump
|
* @per_req_reg_dump: Enable per request reg dump
|
||||||
* @disable_ubwc_comp: Disable UBWC compression
|
* @disable_ubwc_comp: Disable UBWC compression
|
||||||
@@ -57,6 +58,8 @@ struct cam_ife_hw_mgr_debug {
|
|||||||
uint32_t enable_recovery;
|
uint32_t enable_recovery;
|
||||||
uint32_t camif_debug;
|
uint32_t camif_debug;
|
||||||
uint32_t enable_csid_recovery;
|
uint32_t enable_csid_recovery;
|
||||||
|
uint32_t sfe_debug;
|
||||||
|
uint32_t sfe_sensor_diag_cfg;
|
||||||
bool enable_req_dump;
|
bool enable_req_dump;
|
||||||
bool per_req_reg_dump;
|
bool per_req_reg_dump;
|
||||||
bool disable_ubwc_comp;
|
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++)
|
for (i = 0; i < rsrc_data->num_rm; i++)
|
||||||
rc = cam_sfe_bus_start_rm(rsrc_data->rm_res[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 &
|
if (common_data->sfe_debug_cfg &
|
||||||
SFE_DEBUG_ENABLE_RD_DONE_IRQ) {
|
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;
|
struct cam_sfe_debug_cfg_params *debug_cfg;
|
||||||
|
|
||||||
debug_cfg = (struct cam_sfe_debug_cfg_params *)cmd_args;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int cam_sfe_bus_rd_process_cmd(
|
static int cam_sfe_bus_rd_process_cmd(
|
||||||
void *priv, uint32_t cmd_type,
|
void *priv, uint32_t cmd_type,
|
||||||
void *cmd_args, uint32_t arg_size)
|
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_local->hw_ops.process_cmd = cam_sfe_bus_rd_process_cmd;
|
||||||
|
|
||||||
*sfe_bus = sfe_bus_local;
|
*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;
|
return rc;
|
||||||
|
|
||||||
deinit_sfe_bus_rd:
|
deinit_sfe_bus_rd:
|
||||||
|
@@ -91,6 +91,8 @@ struct cam_sfe_bus_wr_common_data {
|
|||||||
uint32_t line_done_cfg;
|
uint32_t line_done_cfg;
|
||||||
bool err_irq_subscribe;
|
bool err_irq_subscribe;
|
||||||
cam_hw_mgr_event_cb_func event_cb;
|
cam_hw_mgr_event_cb_func event_cb;
|
||||||
|
|
||||||
|
uint32_t sfe_debug_cfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cam_sfe_wr_scratch_buf_info {
|
struct cam_sfe_wr_scratch_buf_info {
|
||||||
@@ -2584,6 +2586,19 @@ static int __cam_sfe_bus_wr_process_cmd(
|
|||||||
cmd_args, arg_size);
|
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(
|
static int cam_sfe_bus_wr_process_cmd(
|
||||||
struct cam_isp_resource_node *priv,
|
struct cam_isp_resource_node *priv,
|
||||||
uint32_t cmd_type, void *cmd_args,
|
uint32_t cmd_type, void *cmd_args,
|
||||||
@@ -2642,6 +2657,9 @@ static int cam_sfe_bus_wr_process_cmd(
|
|||||||
rc = 0;
|
rc = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CAM_ISP_HW_CMD_SET_SFE_DEBUG_CFG:
|
||||||
|
rc = cam_sfe_bus_wr_set_debug_cfg(priv, cmd_args);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
CAM_ERR_RATE_LIMIT(CAM_SFE, "Invalid HW command type:%d",
|
CAM_ERR_RATE_LIMIT(CAM_SFE, "Invalid HW command type:%d",
|
||||||
cmd_type);
|
cmd_type);
|
||||||
@@ -2735,7 +2753,7 @@ int cam_sfe_bus_wr_init(
|
|||||||
false);
|
false);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
CAM_ERR(CAM_SFE, "Init bus_irq_controller failed");
|
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);
|
INIT_LIST_HEAD(&bus_priv->free_comp_grp);
|
||||||
@@ -2798,6 +2816,8 @@ deinit_comp_grp:
|
|||||||
i = bus_priv->num_comp_grp;
|
i = bus_priv->num_comp_grp;
|
||||||
for (--i; i >= 0; i--)
|
for (--i; i >= 0; i--)
|
||||||
cam_sfe_bus_deinit_comp_grp(&bus_priv->comp_grp[i]);
|
cam_sfe_bus_deinit_comp_grp(&bus_priv->comp_grp[i]);
|
||||||
|
|
||||||
|
free_sfe_out:
|
||||||
kfree(bus_priv->sfe_out);
|
kfree(bus_priv->sfe_out);
|
||||||
|
|
||||||
free_comp_grp:
|
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) ||
|
if ((top_priv->sfe_debug_cfg & SFE_DEBUG_ENABLE_SOF_EOF_IRQ) ||
|
||||||
(debug_cfg_enabled)) {
|
(debug_cfg_enabled)) {
|
||||||
if (!path_data->sof_eof_handle) {
|
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->wr_client_desc = sfe_top_hw_info->wr_client_desc;
|
||||||
top_priv->sfe_debug_cfg = 0;
|
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.process_cmd = cam_sfe_top_process_cmd;
|
||||||
sfe_top->hw_ops.start = cam_sfe_top_start;
|
sfe_top->hw_ops.start = cam_sfe_top_start;
|
||||||
sfe_top->hw_ops.stop = cam_sfe_top_stop;
|
sfe_top->hw_ops.stop = cam_sfe_top_stop;
|
||||||
|
Reference in New Issue
Block a user