Merge "msm: camera: cci: Fix CCI Timeout during burst_read concurrency" into camera-kernel.lnx.5.0

This commit is contained in:
Savita Patted
2021-08-04 22:51:15 -07:00
committed by Gerrit - the friendly Code Review server
4 changed files with 7 additions and 8 deletions

View File

@@ -995,6 +995,7 @@ static int32_t cam_cci_burst_read(struct v4l2_subdev *sd,
}
mutex_lock(&cci_dev->cci_master_info[master].mutex_q[queue]);
cci_dev->is_burst_read[master] = true;
reinit_completion(&cci_dev->cci_master_info[master].report_q[queue]);
soc_info = &cci_dev->soc_info;
@@ -1274,6 +1275,7 @@ static int32_t cam_cci_read(struct v4l2_subdev *sd,
}
mutex_lock(&cci_dev->cci_master_info[master].mutex_q[queue]);
cci_dev->is_burst_read[master] = false;
reinit_completion(&cci_dev->cci_master_info[master].report_q[queue]);
soc_info = &cci_dev->soc_info;
@@ -1640,7 +1642,7 @@ static int32_t cam_cci_read_bytes_v_1_2(struct v4l2_subdev *sd,
else
read_cfg->num_byte = read_bytes;
cci_dev->is_burst_read = false;
cci_dev->is_burst_read[master] = false;
rc = cam_cci_read(sd, c_ctrl);
if (rc) {
CAM_ERR(CAM_CCI, "failed to read rc:%d", rc);
@@ -1657,7 +1659,6 @@ static int32_t cam_cci_read_bytes_v_1_2(struct v4l2_subdev *sd,
} while (read_bytes);
ERROR:
cci_dev->is_burst_read = false;
return rc;
}
@@ -1722,10 +1723,8 @@ static int32_t cam_cci_read_bytes(struct v4l2_subdev *sd,
read_cfg->num_byte = read_bytes;
if (read_cfg->num_byte >= CCI_READ_MAX) {
cci_dev->is_burst_read = true;
rc = cam_cci_burst_read(sd, c_ctrl);
} else {
cci_dev->is_burst_read = false;
rc = cam_cci_read(sd, c_ctrl);
}
if (rc) {
@@ -1744,7 +1743,6 @@ static int32_t cam_cci_read_bytes(struct v4l2_subdev *sd,
} while (read_bytes);
ERROR:
cci_dev->is_burst_read = false;
return rc;
}

View File

@@ -171,7 +171,7 @@ irqreturn_t cam_cci_irq(int irq_num, void *data)
(!rd_done_th_assert)) {
cci_dev->cci_master_info[MASTER_0].status = 0;
rd_done_th_assert = true;
if (cci_dev->is_burst_read)
if (cci_dev->is_burst_read[MASTER_0])
complete(
&cci_dev->cci_master_info[MASTER_0].th_complete);
complete(&cci_dev->cci_master_info[MASTER_0].rd_done);
@@ -227,7 +227,7 @@ irqreturn_t cam_cci_irq(int irq_num, void *data)
(!rd_done_th_assert)) {
cci_dev->cci_master_info[MASTER_1].status = 0;
rd_done_th_assert = true;
if (cci_dev->is_burst_read)
if (cci_dev->is_burst_read[MASTER_1])
complete(
&cci_dev->cci_master_info[MASTER_1].th_complete);
complete(&cci_dev->cci_master_info[MASTER_1].rd_done);

View File

@@ -227,7 +227,7 @@ struct cci_device {
uint32_t cpas_handle;
uint32_t irq_status1;
spinlock_t lock_status;
bool is_burst_read;
bool is_burst_read[MASTER_MAX];
uint32_t irqs_disabled;
struct mutex init_mutex;
uint64_t dump_en;

View File

@@ -83,6 +83,7 @@ static int cam_cci_init_master(struct cci_device *cci_dev,
cci_dev->cci_master_info[master].status = 0;
cci_dev->cci_master_info[master].is_initilized = true;
cci_dev->is_burst_read[master] = false;
}
return 0;