diff options
| author | Bjorn Andersson <bjorn.andersson@linaro.org> | 2017-01-29 17:05:50 -0500 |
|---|---|---|
| committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2017-02-06 11:57:25 -0500 |
| commit | 4b48921a8f74e7dfff5b39ab966c86f99717db3a (patch) | |
| tree | c26fc3d6a163e71c0c0257ecbd985d4f332b6c30 | |
| parent | b90fcfcb1378ddab1ee58ec7caaedbba2a8eb7c6 (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/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/remoteproc/qcom_adsp_pil.c | 6 | ||||
| -rw-r--r-- | drivers/remoteproc/qcom_q6v5_pil.c | 6 |
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 | ||
| 75 | static int adsp_load(struct rproc *rproc, const struct firmware *fw) | 77 | static 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 | ||
| 156 | static int q6v5_regulator_init(struct device *dev, struct reg_info *regs, | 158 | static 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; |
