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

