Messages in this thread | | | Date | Mon, 19 Sep 2022 19:29:09 +0530 | Subject | Re: [PATCH v6 7/8] remoteproc: qcom: Add support for memory sandbox | From | Srinivasa Rao Mandadapu <> |
| |
On 9/12/2022 4:31 AM, Stephen Boyd wrote: Thanks for Your time Stephen!!! > Quoting Srinivasa Rao Mandadapu (2022-09-08 06:23:41) >> diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c >> index ccb5592..e55d593 100644 >> --- a/drivers/remoteproc/qcom_q6v5_adsp.c >> +++ b/drivers/remoteproc/qcom_q6v5_adsp.c >> @@ -9,6 +9,7 @@ >> #include <linux/firmware.h> >> #include <linux/interrupt.h> >> #include <linux/io.h> >> +#include <linux/iommu.h> >> #include <linux/iopoll.h> >> #include <linux/kernel.h> >> #include <linux/mfd/syscon.h> >> @@ -48,6 +49,8 @@ >> #define LPASS_PWR_ON_REG 0x10 >> #define LPASS_HALTREQ_REG 0x0 >> >> +#define SID_MASK_DEFAULT 0xF >> + >> #define QDSP6SS_XO_CBCR 0x38 >> #define QDSP6SS_CORE_CBCR 0x20 >> #define QDSP6SS_SLEEP_CBCR 0x3c >> @@ -333,6 +336,42 @@ static int adsp_load(struct rproc *rproc, const struct firmware *fw) >> return 0; >> } >> >> +static void adsp_unmap_smmu(struct rproc *rproc) >> +{ >> + struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; > Drop the cast, it's unnecessary. Okay. Will drop casting. > >> + >> + iommu_unmap(rproc->domain, adsp->mem_phys, adsp->mem_size); >> +} >> + > [..] >> @@ -343,9 +382,17 @@ static int adsp_start(struct rproc *rproc) >> if (ret) >> return ret; >> >> + if (adsp->has_iommu) { >> + ret = adsp_map_smmu(adsp, rproc); >> + if (ret) { >> + dev_err(adsp->dev, "ADSP smmu mapping failed\n"); >> + goto disable_irqs; >> + } >> + } >> + >> ret = clk_prepare_enable(adsp->xo); >> if (ret) >> - goto disable_irqs; >> + goto adsp_smmu_unmap; >> >> ret = qcom_rproc_pds_enable(adsp, adsp->proxy_pds, >> adsp->proxy_pd_count); >> @@ -401,6 +448,9 @@ static int adsp_start(struct rproc *rproc) >> qcom_rproc_pds_disable(adsp, adsp->proxy_pds, adsp->proxy_pd_count); >> disable_xo_clk: >> clk_disable_unprepare(adsp->xo); >> +adsp_smmu_unmap: >> + if (adsp->has_iommu) >> + adsp_unmap_smmu(rproc); > Why not pass adsp directly to adsp_unmap_smmu()? And even better would > be to make it a no-op when adsp->has_iommu is false, so that the code > reads straight-line otherwise. Okay. Will update accordingly. > >> disable_irqs: >> qcom_q6v5_unprepare(&adsp->q6v5); >> >> @@ -429,6 +479,9 @@ static int adsp_stop(struct rproc *rproc) >> if (ret) >> dev_err(adsp->dev, "failed to shutdown: %d\n", ret); >> >> + if (adsp->has_iommu) >> + adsp_unmap_smmu(rproc); >> + >> handover = qcom_q6v5_unprepare(&adsp->q6v5); >> if (handover) >> qcom_adsp_pil_handover(&adsp->q6v5); >> -- >> 2.7.4 >>
| |