From 89d665314e64fae4d735d7e355cddfd51c9f826b Mon Sep 17 00:00:00 2001 From: Siddharth Gupta Date: Thu, 17 Oct 2019 15:45:25 -0700 Subject: [PATCH] thermal: qcom: Migrate SCM calls in msm_lmh_dcvs Migrate SCM calls present in lmh_dbg to use the upstream driver. Change-Id: I6daa774f5dc3af630676c9f3f70f0a5d09a8e7b6 Signed-off-by: Siddharth Gupta Signed-off-by: Elliot Berman --- drivers/firmware/qcom_scm-smc.c | 21 +++++++++++++++++++++ drivers/firmware/qcom_scm.c | 8 ++++++++ drivers/firmware/qcom_scm.h | 4 ++++ include/linux/qcom_scm.h | 5 +++++ 4 files changed, 38 insertions(+) diff --git a/drivers/firmware/qcom_scm-smc.c b/drivers/firmware/qcom_scm-smc.c index 555c22b76eee3..d3f96bc65b903 100644 --- a/drivers/firmware/qcom_scm-smc.c +++ b/drivers/firmware/qcom_scm-smc.c @@ -1520,6 +1520,27 @@ int __qcom_scm_lmh_read_buf_size(struct device *dev, int *size) return ret; } +int __qcom_scm_lmh_limit_dcvsh(struct device *dev, phys_addr_t payload, + uint32_t payload_size, u64 limit_node, uint32_t node_id, + u64 version) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_LMH, + .cmd = QCOM_SCM_LMH_LIMIT_DCVSH, + .owner = ARM_SMCCC_OWNER_SIP + }; + + desc.args[0] = payload; + desc.args[1] = payload_size; + desc.args[2] = limit_node; + desc.args[3] = node_id; + desc.args[4] = version; + desc.arginfo = QCOM_SCM_ARGS(5, QCOM_SCM_RO, QCOM_SCM_VAL, QCOM_SCM_VAL, + QCOM_SCM_VAL, QCOM_SCM_VAL); + + return qcom_scm_call(dev, &desc); +} + int __qcom_scm_lmh_debug_read(struct device *dev, phys_addr_t payload, uint32_t size) { diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 40c31a147f95f..abef50024c7f6 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -709,6 +709,14 @@ int qcom_scm_lmh_read_buf_size(int *size) } EXPORT_SYMBOL(qcom_scm_lmh_read_buf_size); +int qcom_scm_lmh_limit_dcvsh(phys_addr_t payload, uint32_t payload_size, + u64 limit_node, uint32_t node_id, u64 version) +{ + return __qcom_scm_lmh_limit_dcvsh(__scm->dev, payload, payload_size, + limit_node, node_id, version); +} +EXPORT_SYMBOL(qcom_scm_lmh_limit_dcvsh); + int qcom_scm_lmh_debug_read(phys_addr_t payload, uint32_t size) { return __qcom_scm_lmh_debug_read(__scm->dev, payload, size); diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h index 0e213fa241234..c9eece2edc323 100644 --- a/drivers/firmware/qcom_scm.h +++ b/drivers/firmware/qcom_scm.h @@ -164,9 +164,13 @@ extern int __qcom_scm_hdcp_req(struct device *dev, #define QCOM_SCM_SVC_LMH 0x13 #define QCOM_SCM_LMH_DEBUG_SET 0x08 #define QCOM_SCM_LMH_DEBUG_READ_BUF_SIZE 0x09 +#define QCOM_SCM_LMH_LIMIT_DCVSH 0x10 #define QCOM_SCM_LMH_DEBUG_READ 0x0A #define QCOM_SCM_LMH_DEBUG_GET_TYPE 0x0B extern int __qcom_scm_lmh_read_buf_size(struct device *dev, int *size); +extern int __qcom_scm_lmh_limit_dcvsh(struct device *dev, phys_addr_t payload, + uint32_t payload_size, u64 limit_node, uint32_t node_id, + u64 version); extern int __qcom_scm_lmh_debug_read(struct device *dev, phys_addr_t payload, uint32_t size); extern int __qcom_scm_lmh_debug_config_write(struct device *dev, u64 cmd_id, diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h index ffbe5e8f55d3c..242172432db0a 100644 --- a/include/linux/qcom_scm.h +++ b/include/linux/qcom_scm.h @@ -103,6 +103,8 @@ extern bool qcom_scm_is_lmh_debug_read_buf_size_available(void); extern bool qcom_scm_is_lmh_debug_read_buf_available(void); extern bool qcom_scm_is_lmh_debug_get_type_available(void); extern int qcom_scm_lmh_read_buf_size(int *size); +extern int qcom_scm_lmh_limit_dcvsh(phys_addr_t payload, uint32_t payload_size, + u64 limit_node, uint32_t node_id, u64 version); extern int qcom_scm_lmh_debug_read(phys_addr_t payload, uint32_t size); extern int qcom_scm_lmh_debug_set_config_write(phys_addr_t payload, int payload_size, uint32_t *buf, int buf_size); @@ -215,6 +217,9 @@ static inline bool qcom_scm_is_lmh_debug_read_buf_available(void) static inline bool qcom_scm_is_lmh_debug_get_type_available(void) { return -EINVAL; } static inline int qcom_scm_lmh_read_buf_size(int *size) { return -ENODEV; } +static inline int qcom_scm_lmh_limit_dcvsh(phys_addr_t payload, + uint32_t payload_size, u64 limit_node, uint32_t node_id, + u64 version) { return -ENODEV; } static inline int qcom_scm_lmh_debug_read(phys_addr_t payload, uint32_t size) { return -ENODEV; } static inline int qcom_scm_lmh_debug_set_config_write(phys_addr_t payload,