From 23a99bc7bce2ac0d59aa41e1a24fabdb0307441c Mon Sep 17 00:00:00 2001 From: Siddharth Gupta Date: Wed, 6 Nov 2019 16:57:48 -0800 Subject: [PATCH] firmware: qcom_scm: Add calls for seccam Add calls to the SCM driver for seccam driver. Change-Id: I0468057945ab8c84ea6c608fdb194093422a2c3e Signed-off-by: Siddharth Gupta Signed-off-by: Elliot Berman --- drivers/firmware/qcom_scm-smc.c | 16 ++++++++++++++++ drivers/firmware/qcom_scm.c | 6 ++++++ drivers/firmware/qcom_scm.h | 3 +++ include/linux/qcom_scm.h | 3 +++ 4 files changed, 28 insertions(+) diff --git a/drivers/firmware/qcom_scm-smc.c b/drivers/firmware/qcom_scm-smc.c index 6064dbed3357..d7e55267bf1e 100644 --- a/drivers/firmware/qcom_scm-smc.c +++ b/drivers/firmware/qcom_scm-smc.c @@ -1739,6 +1739,22 @@ int __qcom_scm_qdss_invoke(struct device *dev, phys_addr_t addr, size_t size, return ret ? : desc.res[0]; } +int __qcom_scm_camera_protect_all(struct device *dev, uint32_t protect, + uint32_t param) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_CAMERA, + .cmd = QCOM_SCM_CAMERA_PROTECT_ALL, + .owner = ARM_SMCCC_OWNER_SIP + }; + + desc.args[0] = protect; + desc.args[1] = param; + desc.arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_VAL, QCOM_SCM_VAL); + + return qcom_scm_call(dev, &desc); +} + int __qcom_scm_camera_protect_phy_lanes(struct device *dev, bool protect, u64 regmask) { diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 38e26c37d915..ff74247fd546 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -834,6 +834,12 @@ int qcom_scm_qdss_invoke(phys_addr_t paddr, size_t size, u64 *out) } EXPORT_SYMBOL(qcom_scm_qdss_invoke); +int qcom_scm_camera_protect_all(uint32_t protect, uint32_t param) +{ + return __qcom_scm_camera_protect_all(__scm->dev, protect, param); +} +EXPORT_SYMBOL(qcom_scm_camera_protect_all); + int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask) { return __qcom_scm_camera_protect_phy_lanes(__scm->dev, protect, diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h index 6096d5a70176..da0e50ca4d91 100644 --- a/drivers/firmware/qcom_scm.h +++ b/drivers/firmware/qcom_scm.h @@ -208,7 +208,10 @@ extern int __qcom_scm_qdss_invoke(struct device *dev, phys_addr_t addr, size_t size, u64 *out); #define QCOM_SCM_SVC_CAMERA 0x18 +#define QCOM_SCM_CAMERA_PROTECT_ALL 0x06 #define QCOM_SCM_CAMERA_PROTECT_PHY_LANES 0x07 +extern int __qcom_scm_camera_protect_all(struct device *dev, uint32_t protect, + uint32_t param); extern int __qcom_scm_camera_protect_phy_lanes(struct device *dev, bool protect, u64 regmask); diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h index 889a7a15826e..5e4daba01b9e 100644 --- a/include/linux/qcom_scm.h +++ b/include/linux/qcom_scm.h @@ -164,6 +164,7 @@ extern int qcom_scm_smmu_change_pgtbl_format(u64 dev_id, int cbndx); extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en); 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_protect_all(uint32_t protect, uint32_t param); extern int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask); extern int qcom_scm_ice_restore_cfg(void); extern int qcom_scm_get_tz_log_feat_id(u64 *version); @@ -311,6 +312,8 @@ static inline int qcom_scm_smmu_notify_secure_lut(u64 dev_id, bool secure) { return -EINVAL; } static inline int qcom_scm_qdss_invoke(phys_addr_t data, size_t size, u64 *out) { return -EINVAL; } +static inline int qcom_scm_camera_protect_all(uint32_t protect, uint32_t param) + { return -ENODEV; } static inline int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask) { return -EINVAL; } static inline int qcom_scm_ice_restore_cfg(void) { return -ENODEV; }