aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Andersson <bjorn.andersson@linaro.org>2017-01-29 17:05:50 -0500
committerBjorn Andersson <bjorn.andersson@linaro.org>2017-02-06 11:57:25 -0500
commit4b48921a8f74e7dfff5b39ab966c86f99717db3a (patch)
treec26fc3d6a163e71c0c0257ecbd985d4f332b6c30
parentb90fcfcb1378ddab1ee58ec7caaedbba2a8eb7c6 (diff)
remoteproc: qcom: Use common SMD edge handler
Call the common SMD edge handler to instantiate subdevices to bring associated SMD edges up and down as the remoteproc is started and stopped. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
-rw-r--r--drivers/remoteproc/Kconfig2
-rw-r--r--drivers/remoteproc/qcom_adsp_pil.c6
-rw-r--r--drivers/remoteproc/qcom_q6v5_pil.c6
3 files changed, 14 insertions, 0 deletions
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index 555dba04b5ae..402de7089302 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -76,6 +76,7 @@ config QCOM_ADSP_PIL
76 depends on OF && ARCH_QCOM 76 depends on OF && ARCH_QCOM
77 depends on REMOTEPROC 77 depends on REMOTEPROC
78 depends on QCOM_SMEM 78 depends on QCOM_SMEM
79 depends on QCOM_SMD || (COMPILE_TEST && QCOM_SMD=n)
79 select MFD_SYSCON 80 select MFD_SYSCON
80 select QCOM_MDT_LOADER 81 select QCOM_MDT_LOADER
81 select QCOM_RPROC_COMMON 82 select QCOM_RPROC_COMMON
@@ -92,6 +93,7 @@ config QCOM_Q6V5_PIL
92 depends on OF && ARCH_QCOM 93 depends on OF && ARCH_QCOM
93 depends on QCOM_SMEM 94 depends on QCOM_SMEM
94 depends on REMOTEPROC 95 depends on REMOTEPROC
96 depends on QCOM_SMD || (COMPILE_TEST && QCOM_SMD=n)
95 select MFD_SYSCON 97 select MFD_SYSCON
96 select QCOM_RPROC_COMMON 98 select QCOM_RPROC_COMMON
97 select QCOM_SCM 99 select QCOM_SCM
diff --git a/drivers/remoteproc/qcom_adsp_pil.c b/drivers/remoteproc/qcom_adsp_pil.c
index 301b820216f6..f1b147c96d44 100644
--- a/drivers/remoteproc/qcom_adsp_pil.c
+++ b/drivers/remoteproc/qcom_adsp_pil.c
@@ -70,6 +70,8 @@ struct qcom_adsp {
70 phys_addr_t mem_reloc; 70 phys_addr_t mem_reloc;
71 void *mem_region; 71 void *mem_region;
72 size_t mem_size; 72 size_t mem_size;
73
74 struct qcom_rproc_subdev smd_subdev;
73}; 75};
74 76
75static int adsp_load(struct rproc *rproc, const struct firmware *fw) 77static int adsp_load(struct rproc *rproc, const struct firmware *fw)
@@ -404,6 +406,8 @@ static int adsp_probe(struct platform_device *pdev)
404 goto free_rproc; 406 goto free_rproc;
405 } 407 }
406 408
409 qcom_add_smd_subdev(rproc, &adsp->smd_subdev);
410
407 ret = rproc_add(rproc); 411 ret = rproc_add(rproc);
408 if (ret) 412 if (ret)
409 goto free_rproc; 413 goto free_rproc;
@@ -422,6 +426,8 @@ static int adsp_remove(struct platform_device *pdev)
422 426
423 qcom_smem_state_put(adsp->state); 427 qcom_smem_state_put(adsp->state);
424 rproc_del(adsp->rproc); 428 rproc_del(adsp->rproc);
429
430 qcom_remove_smd_subdev(adsp->rproc, &adsp->smd_subdev);
425 rproc_free(adsp->rproc); 431 rproc_free(adsp->rproc);
426 432
427 return 0; 433 return 0;
diff --git a/drivers/remoteproc/qcom_q6v5_pil.c b/drivers/remoteproc/qcom_q6v5_pil.c
index b129261d7e5e..26446eb08bd8 100644
--- a/drivers/remoteproc/qcom_q6v5_pil.c
+++ b/drivers/remoteproc/qcom_q6v5_pil.c
@@ -151,6 +151,8 @@ struct q6v5 {
151 phys_addr_t mpss_reloc; 151 phys_addr_t mpss_reloc;
152 void *mpss_region; 152 void *mpss_region;
153 size_t mpss_size; 153 size_t mpss_size;
154
155 struct qcom_rproc_subdev smd_subdev;
154}; 156};
155 157
156static int q6v5_regulator_init(struct device *dev, struct reg_info *regs, 158static int q6v5_regulator_init(struct device *dev, struct reg_info *regs,
@@ -1035,6 +1037,8 @@ static int q6v5_probe(struct platform_device *pdev)
1035 goto free_rproc; 1037 goto free_rproc;
1036 } 1038 }
1037 1039
1040 qcom_add_smd_subdev(rproc, &qproc->smd_subdev);
1041
1038 ret = rproc_add(rproc); 1042 ret = rproc_add(rproc);
1039 if (ret) 1043 if (ret)
1040 goto free_rproc; 1044 goto free_rproc;
@@ -1052,6 +1056,8 @@ static int q6v5_remove(struct platform_device *pdev)
1052 struct q6v5 *qproc = platform_get_drvdata(pdev); 1056 struct q6v5 *qproc = platform_get_drvdata(pdev);
1053 1057
1054 rproc_del(qproc->rproc); 1058 rproc_del(qproc->rproc);
1059
1060 qcom_remove_smd_subdev(qproc->rproc, &qproc->smd_subdev);
1055 rproc_free(qproc->rproc); 1061 rproc_free(qproc->rproc);
1056 1062
1057 return 0; 1063 return 0;