diff options
author | Dilip Kota <dkota@codeaurora.org> | 2015-05-21 17:49:36 +0530 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:04:17 -0700 |
commit | c8817de47e2b6cd584b1f61b39596cacb6936ba7 (patch) | |
tree | 6eab592745ed9a5600ed8f6cb9279afc6b8a7d94 /drivers/devfreq/devfreq_spdm.c | |
parent | 2aec94e3b5b2e5e226004c2ef2184f4f00d1e155 (diff) |
devfreq: devfreq_spdm: Scale parameters to and from TZ driver
Send all the frequency performance levels in KHz units to TZ driver and
convert all the bandwidth recommendations to Bytes/s from Kbytes/s to
accomodate change in the syscall interface calls to TZ SPDM driver.
Change-Id: I209ea0583fdd43f78f51793d7818ea5afd5959c7
Signed-off-by: Dilip Kota <dkota@codeaurora.org>
Signed-off-by: Girish Mahadevan <girishm@codeaurora.org>
Diffstat (limited to 'drivers/devfreq/devfreq_spdm.c')
-rw-r--r-- | drivers/devfreq/devfreq_spdm.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/devfreq/devfreq_spdm.c b/drivers/devfreq/devfreq_spdm.c index 28ae33ead793..f8ef5eda08ea 100644 --- a/drivers/devfreq/devfreq_spdm.c +++ b/drivers/devfreq/devfreq_spdm.c @@ -70,7 +70,7 @@ static int change_bw(struct device *dev, unsigned long *freq, u32 flags) update_thresholds: desc.arg[0] = SPDM_CMD_ENABLE; desc.arg[1] = data->spdm_client; - desc.arg[2] = clk_get_rate(data->cci_clk); + desc.arg[2] = (clk_get_rate(data->cci_clk)) / 1000; ext_status = spdm_ext_call(&desc, 3); if (ext_status) pr_err("External command %u failed with error %u", @@ -302,6 +302,8 @@ static int probe(struct platform_device *pdev) { struct spdm_data *data = 0; int ret = -EINVAL; + struct spdm_args desc = { { 0 } }; + int ext_status = 0; data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); if (!data) @@ -315,6 +317,20 @@ static int probe(struct platform_device *pdev) if (ret) goto bad_of; + desc.arg[0] = SPDM_CMD_GET_VERSION; + ext_status = spdm_ext_call(&desc, 1); + if (ext_status) { + pr_err("%s:External command %u failed with error %u\n", + __func__, (int)desc.arg[0], ext_status); + goto bad_of; + } + + if (desc.ret[0] < SPDM_TZ_VERSION) { + pr_err("%s: Version mismatch expected 0x%x got 0x%x", __func__, + SPDM_TZ_VERSION, (int)desc.arg[0]); + goto bad_of; + } + data->bus_scale_client_id = msm_bus_scale_register_client(data->pdata); if (!data->bus_scale_client_id) { ret = -EINVAL; |