summaryrefslogtreecommitdiff
path: root/drivers/devfreq/devfreq_spdm_debugfs.c
diff options
context:
space:
mode:
authorDan Sneddon <dsneddon@codeaurora.org>2014-11-05 12:23:30 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:04:10 -0700
commita145a6f2e7b2b762ee631652aef1e6f78a61835c (patch)
treee20a2887da0d1444d321298066dc67a46bdca36a /drivers/devfreq/devfreq_spdm_debugfs.c
parent384511e2a0cb2662e1bb96ec86af55e724b22b10 (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.c111
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;