diff options
author | Dan Sneddon <dsneddon@codeaurora.org> | 2014-11-05 12:23:30 -0700 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:04:10 -0700 |
commit | a145a6f2e7b2b762ee631652aef1e6f78a61835c (patch) | |
tree | e20a2887da0d1444d321298066dc67a46bdca36a /drivers/devfreq/devfreq_spdm_debugfs.c | |
parent | 384511e2a0cb2662e1bb96ec86af55e724b22b10 (diff) |
devfreq: devfreq_spdm: Support scm and hvc
Currently SPDM driver uses hvc calls to support
the dcvs algorithm logic. On some targets this
dcvs algorithm support is present in TZ and which
is accessed via separate calls. Add SCM call to
support TZ based dcvs algorithm.
Change-Id: I197f0f13b4107047151e10e19e4849008607f3e8
Signed-off-by: Dan Sneddon <dsneddon@codeaurora.org>
Signed-off-by: Alok Chauhan <alokc@codeaurora.org>
Diffstat (limited to 'drivers/devfreq/devfreq_spdm_debugfs.c')
-rw-r--r-- | drivers/devfreq/devfreq_spdm_debugfs.c | 111 |
1 files changed, 73 insertions, 38 deletions
diff --git a/drivers/devfreq/devfreq_spdm_debugfs.c b/drivers/devfreq/devfreq_spdm_debugfs.c index ef7ac3323ce2..8ef329620a86 100644 --- a/drivers/devfreq/devfreq_spdm_debugfs.c +++ b/drivers/devfreq/devfreq_spdm_debugfs.c @@ -1,5 +1,5 @@ /* -*Copyright (c) 2014, The Linux Foundation. All rights reserved. +*Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. * *This program is free software; you can redistribute it and/or modify *it under the terms of the GNU General Public License version 2 and @@ -15,7 +15,6 @@ #include <linux/module.h> #include <linux/slab.h> #include <linux/uaccess.h> -#include <soc/qcom/hvc.h> #include "devfreq_spdm.h" static int spdm_open(struct inode *inode, struct file *file) @@ -29,7 +28,8 @@ static ssize_t pl_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; int i; buf = kzalloc(size, GFP_KERNEL); @@ -47,8 +47,10 @@ static ssize_t pl_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; for (i = 0; i < SPDM_PL_COUNT - 1; i++) desc.arg[i+2] = spdm_data->config_data.pl_freqs[i]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, SPDM_PL_COUNT + 1); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -64,7 +66,8 @@ static ssize_t rejrate_low_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -80,8 +83,10 @@ static ssize_t rejrate_low_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.reject_rate[0]; desc.arg[3] = spdm_data->config_data.reject_rate[1]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -97,7 +102,8 @@ static ssize_t rejrate_med_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -112,8 +118,10 @@ static ssize_t rejrate_med_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.reject_rate[2]; desc.arg[3] = spdm_data->config_data.reject_rate[3]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -129,7 +137,8 @@ static ssize_t rejrate_high_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -144,8 +153,10 @@ static ssize_t rejrate_high_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.reject_rate[4]; desc.arg[3] = spdm_data->config_data.reject_rate[5]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -161,7 +172,8 @@ static ssize_t resptime_low_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -176,8 +188,10 @@ static ssize_t resptime_low_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.response_time_us[0]; desc.arg[3] = spdm_data->config_data.response_time_us[1]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -193,7 +207,8 @@ static ssize_t resptime_med_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -208,8 +223,10 @@ static ssize_t resptime_med_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.response_time_us[2]; desc.arg[3] = spdm_data->config_data.response_time_us[3]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -225,7 +242,8 @@ static ssize_t resptime_high_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -240,8 +258,10 @@ static ssize_t resptime_high_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.response_time_us[4]; desc.arg[3] = spdm_data->config_data.response_time_us[5]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -257,7 +277,8 @@ static ssize_t cciresptime_low_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -272,8 +293,10 @@ static ssize_t cciresptime_low_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.cci_response_time_us[0]; desc.arg[3] = spdm_data->config_data.cci_response_time_us[1]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -289,7 +312,8 @@ static ssize_t cciresptime_med_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -304,8 +328,10 @@ static ssize_t cciresptime_med_write(struct file *file, const char __user *data, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.cci_response_time_us[2]; desc.arg[3] = spdm_data->config_data.cci_response_time_us[3]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -322,7 +348,8 @@ static ssize_t cciresptime_high_write(struct file *file, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -337,8 +364,10 @@ static ssize_t cciresptime_high_write(struct file *file, desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.cci_response_time_us[4]; desc.arg[3] = spdm_data->config_data.cci_response_time_us[5]; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 4); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -354,7 +383,8 @@ static ssize_t cci_max_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -367,8 +397,10 @@ static ssize_t cci_max_write(struct file *file, const char __user *data, desc.arg[0] = SPDM_CMD_CFG_MAXCCI; desc.arg[1] = spdm_data->spdm_client; desc.arg[2] = spdm_data->config_data.max_cci_freq; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 3); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; @@ -384,7 +416,8 @@ static ssize_t vote_cfg_write(struct file *file, const char __user *data, { struct spdm_data *spdm_data = file->private_data; char *buf; - struct hvc_desc desc; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; buf = kzalloc(size, GFP_KERNEL); @@ -403,8 +436,10 @@ static ssize_t vote_cfg_write(struct file *file, const char __user *data, desc.arg[3] = spdm_data->config_data.downstep; desc.arg[4] = spdm_data->config_data.max_vote; desc.arg[5] = spdm_data->config_data.up_step_multp; - if (hvc(HVC_FN_SIP(SPDM_HYP_FNID), &desc)) - pr_debug("check hvc logs"); + ext_status = spdm_ext_call(&desc, 6); + if (ext_status) + pr_err("External command %u failed with error %u", + (int)desc.arg[0], ext_status); *offset += size; kfree(buf); return size; |