From a0970bdfc217cb6760d028c0ebf40c6e02572097 Mon Sep 17 00:00:00 2001 From: Srinivas Kandagatla Date: Tue, 24 Nov 2015 16:55:32 +0000 Subject: [PATCH] firmware: scm: add proc restart support Signed-off-by: Srinivas Kandagatla --- drivers/firmware/qcom_scm-32.c | 8 ++++++++ drivers/firmware/qcom_scm-64.c | 16 ++++++++++++++++ drivers/firmware/qcom_scm.c | 5 +++++ drivers/firmware/qcom_scm.h | 1 + include/linux/qcom_scm.h | 1 + 5 files changed, 31 insertions(+) diff --git a/drivers/firmware/qcom_scm-32.c b/drivers/firmware/qcom_scm-32.c index 2ac6abc0d652..26a6a8cace79 100644 --- a/drivers/firmware/qcom_scm-32.c +++ b/drivers/firmware/qcom_scm-32.c @@ -501,6 +501,14 @@ int __qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp) req, req_cnt * sizeof(*req), resp, sizeof(*resp)); } +int __qcom_scm_restart_proc(u32 proc_id, int restart, u32 *resp) +{ + + return qcom_scm_call(QCOM_SCM_SVC_PIL, proc_id, + &restart, sizeof(restart), + &resp, sizeof(resp)); +} + bool __qcom_scm_pas_supported(u32 peripheral) { u32 ret_val; diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c index b3a9784c15ef..6b31a8c00d1d 100644 --- a/drivers/firmware/qcom_scm-64.c +++ b/drivers/firmware/qcom_scm-64.c @@ -472,6 +472,22 @@ int __qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp) return ret; } +int __qcom_scm_restart_proc(u32 proc_id, int restart, u32 *resp) +{ + int ret; + struct qcom_scm_desc desc = {0}; + + desc.args[0] = restart; + desc.args[1] = 0; + desc.arginfo = QCOM_SCM_ARGS(2); + + ret = qcom_scm_call(QCOM_SCM_SVC_PIL, proc_id, + &desc); + *resp = desc.ret[0]; + + return ret; +} + bool __qcom_scm_pas_supported(u32 peripheral) { int ret; diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 5fff0858f7ba..7ed996ba9411 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -96,6 +96,11 @@ int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp) } EXPORT_SYMBOL(qcom_scm_hdcp_req); +int qcom_scm_restart_proc(u32 pid, int restart, u32 *resp) +{ + return __qcom_scm_restart_proc(pid, restart, resp); +} +EXPORT_SYMBOL(qcom_scm_restart_proc); /** * qcom_scm_pas_supported() - Check if the peripheral authentication service is * available for the given peripherial diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h index 5d7f0ef6fee7..2f46f0ced9f7 100644 --- a/drivers/firmware/qcom_scm.h +++ b/drivers/firmware/qcom_scm.h @@ -111,6 +111,7 @@ extern int __qcom_scm_iommu_secure_unmap(u32 id, u32 ctx_id, u64 va, extern int __qcom_scm_is_call_available(u32 svc_id, u32 cmd_id); extern int __qcom_scm_get_feat_version(u32 feat); extern int __qcom_scm_restore_sec_cfg(u32 device_id, u32 spare); +extern int __qcom_scm_restart_proc(u32 proc_id, int restart, u32 *resp); extern int __qcom_scm_set_video_state(u32 state, u32 spare); extern int __qcom_scm_mem_protect_video_var(u32 start, u32 size, diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h index 8e042773dd58..0b9f01b489cb 100644 --- a/include/linux/qcom_scm.h +++ b/include/linux/qcom_scm.h @@ -32,6 +32,7 @@ extern int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp); extern bool qcom_scm_pas_supported(u32 peripheral); +extern int qcom_scm_restart_proc(u32 pid, int restart, u32 *resp); extern int qcom_scm_pas_init_image(struct device *dev, u32 peripheral, const void *metadata, size_t size); extern int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr, phys_addr_t size); extern int qcom_scm_pas_auth_and_reset(u32 peripheral); -- 2.39.5