firmware: qcom_scm: Add new scm to update Camera QoS
Add new SCM call to program secure camera qos settings. For each NIU camera driver can call this scm API which need each NIU's register offsets, value and number of registers offset that need to be programed. CRs-Fixed: 3781697 Change-Id: I35fbb433cceb032762246f526c5b28cb0f3d5d19 Signed-off-by: Dharmender Sharma <quic_dharshar@quicinc.com> Signed-off-by: Alok Chauhan <quic_alokc@quicinc.com>
This commit is contained in:
parent
d3b1f3c1f6
commit
fed3a6fd30
@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright (c) 2010,2015,2019,2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (C) 2015 Linaro Ltd.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#define pr_fmt(fmt) "qcom-scm: %s: " fmt, __func__
|
||||
|
||||
@ -2439,6 +2439,51 @@ int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask)
|
||||
}
|
||||
EXPORT_SYMBOL(qcom_scm_camera_protect_phy_lanes);
|
||||
|
||||
int qcom_scm_camera_update_camnoc_qos(uint32_t use_case_id,
|
||||
uint32_t cam_qos_cnt, struct qcom_scm_camera_qos *cam_qos)
|
||||
{
|
||||
int ret;
|
||||
dma_addr_t payload_phys;
|
||||
u32 *payload_buf = NULL;
|
||||
u32 payload_size = 0;
|
||||
|
||||
struct qcom_scm_desc desc = {
|
||||
.svc = QCOM_SCM_SVC_CAMERA,
|
||||
.cmd = QCOM_SCM_CAMERA_UPDATE_CAMNOC_QOS,
|
||||
.owner = ARM_SMCCC_OWNER_SIP,
|
||||
.args[0] = use_case_id,
|
||||
.args[2] = payload_size,
|
||||
.arginfo = QCOM_SCM_ARGS(3, QCOM_SCM_VAL, QCOM_SCM_RW, QCOM_SCM_VAL),
|
||||
};
|
||||
|
||||
if ((cam_qos_cnt > QCOM_SCM_CAMERA_MAX_QOS_CNT) || (cam_qos_cnt && !cam_qos)) {
|
||||
pr_err("Invalid input SmartQoS count: %d\n", cam_qos_cnt);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
payload_size = cam_qos_cnt * sizeof(struct qcom_scm_camera_qos);
|
||||
|
||||
/* fill all required qos settings */
|
||||
if (use_case_id && payload_size && cam_qos) {
|
||||
payload_buf = dma_alloc_coherent(__scm->dev,
|
||||
payload_size, &payload_phys, GFP_KERNEL);
|
||||
if (!payload_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(payload_buf, cam_qos, payload_size);
|
||||
desc.args[1] = payload_phys;
|
||||
desc.args[2] = payload_size;
|
||||
}
|
||||
|
||||
ret = qcom_scm_call(__scm->dev, &desc, NULL);
|
||||
|
||||
if (payload_buf)
|
||||
dma_free_coherent(__scm->dev, payload_size, payload_buf, payload_phys);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_scm_camera_update_camnoc_qos);
|
||||
|
||||
int qcom_scm_tsens_reinit(int *tsens_ret)
|
||||
{
|
||||
unsigned int ret;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/* Copyright (c) 2010-2015,2019,2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef __QCOM_SCM_INT_H
|
||||
#define __QCOM_SCM_INT_H
|
||||
@ -216,6 +216,7 @@ extern int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc,
|
||||
#define QCOM_SCM_SVC_CAMERA 0x18
|
||||
#define QCOM_SCM_CAMERA_PROTECT_ALL 0x06
|
||||
#define QCOM_SCM_CAMERA_PROTECT_PHY_LANES 0x07
|
||||
#define QCOM_SCM_CAMERA_UPDATE_CAMNOC_QOS 0x0A
|
||||
|
||||
#define QCOM_SCM_SVC_WAITQ 0x24
|
||||
#define QCOM_SCM_WAITQ_ACK 0x01
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/* Copyright (c) 2010-2015, 2018-2019, 2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (C) 2015 Linaro Ltd.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef __QCOM_SCM_H
|
||||
#define __QCOM_SCM_H
|
||||
@ -14,6 +14,12 @@
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_ON 0x0
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_OFF 0x1
|
||||
#define QCOM_SCM_HDCP_MAX_REQ_CNT 5
|
||||
#define QCOM_SCM_CAMERA_MAX_QOS_CNT 2
|
||||
|
||||
struct qcom_scm_camera_qos {
|
||||
u32 offset;
|
||||
u32 val;
|
||||
};
|
||||
|
||||
enum qcom_download_mode {
|
||||
QCOM_DOWNLOAD_NODUMP = 0x00,
|
||||
@ -279,6 +285,8 @@ extern int qcom_scm_smmu_notify_secure_lut(u64 dev_id, bool secure);
|
||||
|
||||
extern int qcom_scm_qdss_invoke(phys_addr_t addr, size_t size, u64 *out);
|
||||
|
||||
extern int qcom_scm_camera_update_camnoc_qos(uint32_t use_case_id,
|
||||
uint32_t qos_cnt, struct qcom_scm_camera_qos *scm_buf);
|
||||
extern int qcom_scm_camera_protect_all(uint32_t protect, uint32_t param);
|
||||
extern int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user