Skip to content

Commit 038ee40

Browse files
FROMLIST: remoteproc: qcom: pas: Fix the dtb PAS context creation
DTB PAS context creation should be done only for subsystems that support a DTB firmware binary; otherwise, memory is wasted. Move the context creation to the appropriate location and, while at it, fix the place where the DTB PAS context was being released unconditionally. Link: https://lore.kernel.org/lkml/20260325191301.164579-1-mukesh.ojha@oss.qualcomm.com/ Fixes: b13d8ba ("remoteproc: pas: Replace metadata context with PAS context structure") Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
1 parent 5c2fafc commit 038ee40

1 file changed

Lines changed: 18 additions & 18 deletions

File tree

drivers/remoteproc/qcom_q6v5_pas.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,9 @@ static int qcom_pas_load(struct rproc *rproc, const struct firmware *fw)
262262
return 0;
263263

264264
release_dtb_metadata:
265-
qcom_scm_pas_metadata_release(pas->dtb_pas_ctx);
265+
if (pas->dtb_pas_id)
266+
qcom_scm_pas_metadata_release(pas->dtb_pas_ctx);
267+
266268
release_firmware(pas->dtb_firmware);
267269

268270
return ret;
@@ -635,6 +637,7 @@ static void qcom_pas_pds_detach(struct qcom_pas *pas, struct device **pds, size_
635637

636638
static int qcom_pas_alloc_memory_region(struct qcom_pas *pas)
637639
{
640+
struct rproc *rproc = pas->rproc;
638641
struct reserved_mem *rmem;
639642
struct device_node *node;
640643

@@ -660,6 +663,12 @@ static int qcom_pas_alloc_memory_region(struct qcom_pas *pas)
660663
return -EBUSY;
661664
}
662665

666+
pas->pas_ctx = devm_qcom_scm_pas_context_alloc(pas->dev, pas->pas_id,
667+
pas->mem_phys, pas->mem_size);
668+
if (IS_ERR(pas->pas_ctx))
669+
return PTR_ERR(pas->pas_ctx);
670+
671+
pas->pas_ctx->use_tzmem = rproc->has_iommu;
663672
if (!pas->dtb_pas_id)
664673
return 0;
665674

@@ -685,6 +694,14 @@ static int qcom_pas_alloc_memory_region(struct qcom_pas *pas)
685694
return -EBUSY;
686695
}
687696

697+
pas->dtb_pas_ctx = devm_qcom_scm_pas_context_alloc(pas->dev, pas->dtb_pas_id,
698+
pas->dtb_mem_phys,
699+
pas->dtb_mem_size);
700+
if (IS_ERR(pas->dtb_pas_ctx))
701+
return PTR_ERR(pas->dtb_pas_ctx);
702+
703+
pas->dtb_pas_ctx->use_tzmem = rproc->has_iommu;
704+
688705
return 0;
689706
}
690707

@@ -869,23 +886,6 @@ static int qcom_pas_probe(struct platform_device *pdev)
869886

870887
qcom_add_ssr_subdev(rproc, &pas->ssr_subdev, desc->ssr_name);
871888

872-
pas->pas_ctx = devm_qcom_scm_pas_context_alloc(pas->dev, pas->pas_id,
873-
pas->mem_phys, pas->mem_size);
874-
if (IS_ERR(pas->pas_ctx)) {
875-
ret = PTR_ERR(pas->pas_ctx);
876-
goto remove_ssr_sysmon;
877-
}
878-
879-
pas->dtb_pas_ctx = devm_qcom_scm_pas_context_alloc(pas->dev, pas->dtb_pas_id,
880-
pas->dtb_mem_phys,
881-
pas->dtb_mem_size);
882-
if (IS_ERR(pas->dtb_pas_ctx)) {
883-
ret = PTR_ERR(pas->dtb_pas_ctx);
884-
goto remove_ssr_sysmon;
885-
}
886-
887-
pas->pas_ctx->use_tzmem = rproc->has_iommu;
888-
pas->dtb_pas_ctx->use_tzmem = rproc->has_iommu;
889889
ret = rproc_add(rproc);
890890
if (ret)
891891
goto remove_ssr_sysmon;

0 commit comments

Comments
 (0)