On Tue, Nov 04, 2025 at 06:33:49PM +0100, Konrad Dybcio wrote: > On 11/4/25 8:35 AM, Mukesh Ojha wrote: > > As a superset of the existing metadata context, the PAS context > > structure enables both remoteproc and non-remoteproc subsystems to > > better support scenarios where the SoC runs with or without the Gunyah > > hypervisor. To reflect this, relevant SCM and metadata functions are > > updated to incorporate PAS context awareness. > > > > Signed-off-by: Mukesh Ojha <[email protected]> > > --- > > drivers/firmware/qcom/qcom_scm.c | 25 +++++++++++++--------- > > drivers/remoteproc/qcom_q6v5_pas.c | 38 > > ++++++++++++++++++++++++---------- > > drivers/soc/qcom/mdt_loader.c | 4 ++-- > > include/linux/firmware/qcom/qcom_scm.h | 4 ++-- > > include/linux/soc/qcom/mdt_loader.h | 6 +++--- > > 5 files changed, 49 insertions(+), 28 deletions(-) > > > > diff --git a/drivers/firmware/qcom/qcom_scm.c > > b/drivers/firmware/qcom/qcom_scm.c > > index 5a525dbd0a2e..9cdd152da592 100644 > > --- a/drivers/firmware/qcom/qcom_scm.c > > +++ b/drivers/firmware/qcom/qcom_scm.c > > @@ -603,7 +603,7 @@ EXPORT_SYMBOL_GPL(devm_qcom_scm_pas_context_init); > > * and optional blob of data used for authenticating the metadata > > * and the rest of the firmware > > * @size: size of the metadata > > - * @ctx: optional metadata context > > + * @ctx: optional pas context > > * > > * Return: 0 on success. > > * > > @@ -612,8 +612,9 @@ EXPORT_SYMBOL_GPL(devm_qcom_scm_pas_context_init); > > * qcom_scm_pas_metadata_release() by the caller. > > */ > > int qcom_scm_pas_init_image(u32 pas_id, const void *metadata, size_t size, > > - struct qcom_scm_pas_metadata *ctx) > > + struct qcom_scm_pas_context *ctx) > > { > > + struct qcom_scm_pas_metadata *mdt_ctx; > > This is never initialized > > > dma_addr_t mdata_phys; > > void *mdata_buf; > > int ret; > > @@ -665,9 +666,10 @@ int qcom_scm_pas_init_image(u32 pas_id, const void > > *metadata, size_t size, > > if (ret < 0 || !ctx) { > > dma_free_coherent(__scm->dev, size, mdata_buf, mdata_phys); > > } else if (ctx) { > > - ctx->ptr = mdata_buf; > > - ctx->phys = mdata_phys; > > - ctx->size = size; > > + mdt_ctx = ctx->metadata; > > + mdt_ctx->ptr = mdata_buf; > > + mdt_ctx->phys = mdata_phys; > > + mdt_ctx->size = size; > > So this will always cause stack corruption > > > } > > > > return ret ? : res.result[0]; > > @@ -676,16 +678,19 @@ EXPORT_SYMBOL_GPL(qcom_scm_pas_init_image); > > > > /** > > * qcom_scm_pas_metadata_release() - release metadata context > > - * @ctx: metadata context > > + * @ctx: pas context > > */ > > -void qcom_scm_pas_metadata_release(struct qcom_scm_pas_metadata *ctx) > > +void qcom_scm_pas_metadata_release(struct qcom_scm_pas_context *ctx) > > { > > - if (!ctx->ptr) > > + struct qcom_scm_pas_metadata *mdt_ctx; > > Is the existence of this struct any useful after you introduced > pas_context?
Yes, it is still useful, mdt_ctx is only relevant for remoteproc based subsystem like adsp, cdsp, modem while they are not required for video, ipa, gpu etc. but the superset which is pas_context is needed by whosoever need to support secure PAS method Linux at EL2. > > Konrad -- -Mukesh Ojha

