Merge "firmware: qcom_scm: Add new scm to update Camera QoS"
This commit is contained in:
commit
e2f917c73f
@ -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