Merge "msm: camera: cdm: Clear IRQ before reading userdata" into camera-kernel.lnx.4.0
Dieser Commit ist enthalten in:

committet von
Gerrit - the friendly Code Review server

Commit
933a941f33
@@ -1108,19 +1108,25 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
||||
|
||||
for (i = 0; i < cdm_core->offsets->reg_data->num_bl_fifo_irq; i++) {
|
||||
if (cam_cdm_read_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[i]->irq_status,
|
||||
&irq_status[i])) {
|
||||
cdm_core->offsets->irq_reg[i]->irq_status,
|
||||
&irq_status[i])) {
|
||||
CAM_ERR(CAM_CDM, "Failed to read CDM HW IRQ status");
|
||||
}
|
||||
if (cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[i]->irq_clear,
|
||||
irq_status[i])) {
|
||||
CAM_ERR(CAM_CDM,
|
||||
"Failed to Write CDM HW IRQ Clear");
|
||||
}
|
||||
}
|
||||
|
||||
if (cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[0]->irq_clear_cmd, 0x01))
|
||||
CAM_ERR(CAM_CDM, "Failed to Write CDM HW IRQ cmd 0");
|
||||
|
||||
for (i = 0; i < cdm_core->offsets->reg_data->num_bl_fifo_irq; i++) {
|
||||
if (!irq_status[i]) {
|
||||
cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[i]->irq_clear,
|
||||
irq_status[i]);
|
||||
if (!irq_status[i])
|
||||
continue;
|
||||
}
|
||||
|
||||
payload[i] = kzalloc(sizeof(struct cam_cdm_work_payload),
|
||||
GFP_ATOMIC);
|
||||
@@ -1128,11 +1134,10 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
||||
if (!payload[i])
|
||||
continue;
|
||||
|
||||
if (irq_status[i] &
|
||||
CAM_CDM_IRQ_STATUS_INLINE_IRQ_MASK) {
|
||||
if (irq_status[i] & CAM_CDM_IRQ_STATUS_INLINE_IRQ_MASK) {
|
||||
if (cam_cdm_read_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->cmn_reg->usr_data,
|
||||
&user_data)) {
|
||||
cdm_core->offsets->cmn_reg->usr_data,
|
||||
&user_data)) {
|
||||
CAM_ERR(CAM_CDM,
|
||||
"Failed to read CDM HW IRQ data");
|
||||
kfree(payload[i]);
|
||||
@@ -1142,9 +1147,8 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
||||
payload[i]->irq_data = user_data >> (i * 0x8);
|
||||
|
||||
if (payload[i]->irq_data ==
|
||||
CAM_CDM_DBG_GEN_IRQ_USR_DATA)
|
||||
CAM_INFO(CAM_CDM,
|
||||
"Debug gen_irq received");
|
||||
CAM_CDM_DBG_GEN_IRQ_USR_DATA)
|
||||
CAM_INFO(CAM_CDM, "Debug gen_irq received");
|
||||
}
|
||||
|
||||
payload[i]->fifo_idx = i;
|
||||
@@ -1154,18 +1158,9 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
||||
INIT_WORK((struct work_struct *)&payload[i]->work,
|
||||
cam_hw_cdm_work);
|
||||
|
||||
if (cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[i]->irq_clear,
|
||||
payload[i]->irq_status)) {
|
||||
CAM_ERR(CAM_CDM,
|
||||
"Failed to Write CDM HW IRQ Clear");
|
||||
kfree(payload[i]);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
work_status = queue_work(
|
||||
cdm_core->bl_fifo[i].work_queue,
|
||||
&payload[i]->work);
|
||||
cdm_core->bl_fifo[i].work_queue,
|
||||
&payload[i]->work);
|
||||
|
||||
if (work_status == false) {
|
||||
CAM_ERR(CAM_CDM,
|
||||
@@ -1175,11 +1170,6 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
||||
}
|
||||
}
|
||||
|
||||
if (cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[0]->irq_clear_cmd,
|
||||
0x01))
|
||||
CAM_ERR(CAM_CDM, "Failed to Write CDM HW IRQ cmd 0");
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
@@ -3711,7 +3711,20 @@ static int cam_ife_mgr_stop_hw(void *hw_mgr_priv, void *stop_hw_args)
|
||||
|
||||
cam_ife_mgr_pause_hw(ctx);
|
||||
|
||||
wait_for_completion(&ctx->config_done_complete);
|
||||
rc = wait_for_completion_timeout(
|
||||
&ctx->config_done_complete,
|
||||
msecs_to_jiffies(300));
|
||||
if (rc <= 0) {
|
||||
CAM_WARN(CAM_ISP,
|
||||
"config done completion timeout for last applied req_id=%llu rc=%d ctx_index %d",
|
||||
ctx->applied_req_id, rc, ctx->ctx_index);
|
||||
rc = -ETIMEDOUT;
|
||||
} else {
|
||||
CAM_DBG(CAM_ISP,
|
||||
"config done Success for req_id=%llu ctx_index %d",
|
||||
ctx->applied_req_id, ctx->ctx_index);
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
if (stop_isp->stop_only)
|
||||
goto end;
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren