wcnss_load() calls qcom_mdt_load() which bundles metadata init, memory
setup, and segment loading into a single API that does not expose a PAS
context, and wcnss_start() calls qcom_pas_auth_and_reset() which skips
the shmbridge prepare step required before TrustZone authentication.

Allocate a qcom_pas_context in wcnss_probe() via
devm_qcom_pas_context_alloc() and store it in struct qcom_wcnss.
Replace qcom_mdt_load() with qcom_mdt_pas_load() in wcnss_load() and
replace qcom_pas_auth_and_reset() with qcom_pas_prepare_and_auth_reset()
in wcnss_start().  The existing devm_ioremap_wc() mapping is retained
for wcnss_da_to_va() address translation.

Signed-off-by: Mukesh Ojha <[email protected]>
---
 drivers/remoteproc/qcom_wcnss.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c
index c856a92af43c..01f9076aa0b1 100644
--- a/drivers/remoteproc/qcom_wcnss.c
+++ b/drivers/remoteproc/qcom_wcnss.c
@@ -96,6 +96,7 @@ struct qcom_wcnss {
        phys_addr_t mem_reloc;
        void __iomem *mem_region;
        size_t mem_size;
+       struct qcom_pas_context *pas_ctx;
 
        struct qcom_rproc_subdev smd_subdev;
        struct qcom_sysmon *sysmon;
@@ -157,9 +158,7 @@ static int wcnss_load(struct rproc *rproc, const struct 
firmware *fw)
        struct qcom_wcnss *wcnss = rproc->priv;
        int ret;
 
-       ret = qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID,
-                           (__force void *)wcnss->mem_region, wcnss->mem_phys,
-                           wcnss->mem_size, &wcnss->mem_reloc);
+       ret = qcom_mdt_pas_load(wcnss->pas_ctx, fw, rproc->firmware, 
&wcnss->mem_reloc);
        if (ret)
                return ret;
 
@@ -257,7 +256,7 @@ static int wcnss_start(struct rproc *rproc)
        wcnss_indicate_nv_download(wcnss);
        wcnss_configure_iris(wcnss);
 
-       ret = qcom_pas_auth_and_reset(WCNSS_PAS_ID);
+       ret = qcom_pas_prepare_and_auth_reset(wcnss->pas_ctx);
        if (ret) {
                dev_err(wcnss->dev,
                        "failed to authenticate image and release reset\n");
@@ -600,6 +599,11 @@ static int wcnss_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
+       wcnss->pas_ctx = devm_qcom_pas_context_alloc(wcnss->dev, WCNSS_PAS_ID,
+                                                    wcnss->mem_phys, 
wcnss->mem_size);
+       if (IS_ERR(wcnss->pas_ctx))
+               return PTR_ERR(wcnss->pas_ctx);
+
        wcnss->pmu_cfg = mmio + data->pmu_offset;
        wcnss->spare_out = mmio + data->spare_offset;
 
-- 
2.55.0


Reply via email to