qcedev: Port missing 13.1 changes to 14.0.

qcedev: enable/disable bam irqs during clocks
qcedev: fix null pointer dereference in qcedev_release
qcedev: delete request from list if it gets timed out
qcedev: Fix for some coding errors

Test: OEMCrypto tests.

Change-Id: I3c97890963b113d8287f9159adcd192f7be9790f
Signed-off-by: Gaurav Kashyap <quic_gaurkash@quicinc.com>
此提交包含在:
Gaurav Kashyap
2022-09-03 14:53:30 -07:00
提交者 Gerrit - the friendly Code Review server
父節點 ca9f562c5a
當前提交 17a1e87fc9
共有 3 個檔案被更改,包括 67 行新增7 行删除

查看文件

@@ -180,16 +180,31 @@ static void qcedev_ce_high_bw_req(struct qcedev_control *podev,
{
int ret = 0;
if(podev == NULL) return;
mutex_lock(&qcedev_sent_bw_req);
if (high_bw_req) {
if (podev->high_bw_req_count == 0) {
ret = qcedev_control_clocks(podev, true);
if (ret)
goto exit_unlock_mutex;
ret = qce_set_irqs(podev->qce, true);
if (ret) {
pr_err("%s: could not enable bam irqs, ret = %d",
__func__, ret);
qcedev_control_clocks(podev, false);
goto exit_unlock_mutex;
}
}
podev->high_bw_req_count++;
} else {
if (podev->high_bw_req_count == 1) {
ret = qce_set_irqs(podev->qce, false);
if (ret) {
pr_err("%s: could not disable bam irqs, ret = %d",
__func__, ret);
goto exit_unlock_mutex;
}
ret = qcedev_control_clocks(podev, false);
if (ret)
goto exit_unlock_mutex;
@@ -295,7 +310,9 @@ static int qcedev_release(struct inode *inode, struct file *file)
__func__, podev);
}
qcedev_ce_high_bw_req(podev, false);
if (podev)
qcedev_ce_high_bw_req(podev, false);
if (qcedev_unmap_all_buffers(handle))
pr_err("%s: failed to unmap all ion buffers\n", __func__);
@@ -714,6 +731,7 @@ static int submit_req(struct qcedev_async_req *qcedev_areq,
int wait = MAX_CRYPTO_WAIT_TIME;
struct qcedev_async_req *new_req = NULL;
int retries = 0;
int req_wait = MAX_REQUEST_TIME;
qcedev_areq->err = 0;
podev = handle->cntl;
@@ -750,12 +768,16 @@ static int submit_req(struct qcedev_async_req *qcedev_areq,
list_add_tail(&qcedev_areq->list,
&podev->ready_commands);
qcedev_areq->state = QCEDEV_REQ_WAITING;
if (wait_event_interruptible_lock_irq_timeout(
req_wait = wait_event_interruptible_lock_irq_timeout(
qcedev_areq->wait_q,
(qcedev_areq->state == QCEDEV_REQ_CURRENT),
podev->lock,
msecs_to_jiffies(MAX_REQUEST_TIME)) == 0) {
pr_err("%s: request timed out\n", __func__);
msecs_to_jiffies(MAX_REQUEST_TIME));
if ((req_wait == 0) || (req_wait == -ERESTARTSYS)) {
pr_err("%s: request timed out, req_wait = %d\n",
__func__, req_wait);
list_del(&qcedev_areq->list);
podev->active_command = NULL;
spin_unlock_irqrestore(&podev->lock, flags);
return qcedev_areq->err;
}
@@ -1734,6 +1756,8 @@ static int qcedev_smmu_ablk_offload_cipher(struct qcedev_async_req *areq,
}
}
exit:
areq->cipher_req.creq.src = NULL;
areq->cipher_req.creq.dst = NULL;
return err;
}
@@ -2561,13 +2585,21 @@ static int qcedev_probe_device(struct platform_device *pdev)
rc = -ENODEV;
goto exit_scale_busbandwidth;
}
podev->qce = handle;
rc = qce_set_irqs(podev->qce, false);
if (rc) {
pr_err("%s: could not disable bam irqs, ret = %d",
__func__, rc);
goto exit_scale_busbandwidth;
}
rc = icc_set_bw(podev->icc_path, 0, 0);
if (rc) {
pr_err("%s Unable to set to low bandwidth\n", __func__);
goto exit_qce_close;
}
podev->qce = handle;
podev->pdev = pdev;
platform_set_drvdata(pdev, podev);
@@ -2682,6 +2714,12 @@ static int qcedev_suspend(struct platform_device *pdev, pm_message_t state)
mutex_lock(&qcedev_sent_bw_req);
if (podev->high_bw_req_count) {
ret = qce_set_irqs(podev->qce, false);
if (ret) {
pr_err("%s: could not disable bam irqs, ret = %d",
__func__, ret);
goto suspend_exit;
}
ret = qcedev_control_clocks(podev, false);
if (ret)
goto suspend_exit;
@@ -2707,6 +2745,12 @@ static int qcedev_resume(struct platform_device *pdev)
ret = qcedev_control_clocks(podev, true);
if (ret)
goto resume_exit;
ret = qce_set_irqs(podev->qce, true);
if (ret) {
pr_err("%s: could not enable bam irqs, ret = %d",
__func__, ret);
qcedev_control_clocks(podev, false);
}
}
resume_exit: