summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiaogang Cui <xiaogang@codeaurora.org>2015-10-16 17:16:22 +0800
committerJeevan Shriram <jshriram@codeaurora.org>2016-05-16 20:10:40 -0700
commit65cfc1aa9c32b056cff446ef79d831d715fa9df9 (patch)
tree51ae44b19e02c439921eda24f3d40476887913f0
parent8f4e416b1ece1ccdb52e511a2cb2b692e517736e (diff)
soc: qcom: dcc: update xpu probe logic to fix failure
TZ image which has registered SCM_SVC_DISABLE_XPU sevice maybe used by none-dcc-xpu device. Update the xpu check logic to fix the probe failure issue. Change-Id: Id2b38d93e7c12648292546592144eda1e82d76be Signed-off-by: Xiaogang Cui <xiaogang@codeaurora.org> Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
-rw-r--r--drivers/soc/qcom/dcc.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/soc/qcom/dcc.c b/drivers/soc/qcom/dcc.c
index 6ec796e98be9..3222062fd8b6 100644
--- a/drivers/soc/qcom/dcc.c
+++ b/drivers/soc/qcom/dcc.c
@@ -1234,19 +1234,21 @@ static int dcc_probe(struct platform_device *pdev)
INIT_LIST_HEAD(&drvdata->config_head);
drvdata->nr_config = 0;
+ drvdata->xpu_scm_avail = 0;
- if (scm_is_call_available(SCM_SVC_MP, SCM_SVC_DISABLE_XPU) > 0)
- drvdata->xpu_scm_avail = 1;
- else
- drvdata->xpu_scm_avail = 0;
-
- if (drvdata->xpu_scm_avail) {
- res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
- "dcc-xpu-base");
- if (!res)
- return -ENODEV;
-
- drvdata->xpu_addr = res->start;
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+ "dcc-xpu-base");
+ if (res) {
+ if (scm_is_call_available(SCM_SVC_MP,
+ SCM_SVC_DISABLE_XPU) > 0) {
+ drvdata->xpu_scm_avail = 1;
+ drvdata->xpu_addr = res->start;
+ } else {
+ dev_err(dev, "scm call is not available\n");
+ return -EINVAL;
+ }
+ } else {
+ dev_info(dev, "DCC XPU is not specified\n");
}
ret = dcc_xpu_unlock(drvdata);