On Thu, Dec 18, 2025 at 02:34:27PM +0100, Konrad Dybcio wrote: > On 12/17/25 5:34 PM, Mukesh Ojha wrote: > > Qualcomm remote processor may rely on Static and Dynamic resources for > > it to be functional. Static resources are fixed like for example, > > memory-mapped addresses required by the subsystem and dynamic > > resources, such as shared memory in DDR etc., are determined at > > runtime during the boot process. > > > > For most of the Qualcomm SoCs, when run with Gunyah or older QHEE > > hypervisor, all the resources whether it is static or dynamic, is > > managed by the hypervisor. Dynamic resources if it is present for a > > remote processor will always be coming from secure world via SMC call > > while static resources may be present in remote processor firmware > > binary or it may be coming qcom_scm_pas_get_rsc_table() SMC call along > > with dynamic resources. > > > > Some of the remote processor drivers, such as video, GPU, IPA, etc., do > > not check whether resources are present in their remote processor > > firmware binary. In such cases, the caller of this function should set > > input_rt and input_rt_size as NULL and zero respectively. Remoteproc > > framework has method to check whether firmware binary contain resources > > or not and they should be pass resource table pointer to input_rt and > > resource table size to input_rt_size and this will be forwarded to > > TrustZone for authentication. TrustZone will then append the dynamic > > resources and return the complete resource table in output_rt > > > > More about documentation on resource table format can be found in > > include/linux/remoteproc.h > > > > Signed-off-by: Mukesh Ojha <[email protected]> > > --- > > [...] > > > + memcpy(input_rt_tzm, input_rt, input_rt_size); > > + > > + do { > > + output_rt_tzm = qcom_tzmem_alloc(__scm->mempool, size, > > GFP_KERNEL); > > + if (!output_rt_tzm) { > > + ret = -ENOMEM; > > + goto free_input_rt; > > + } > > + > > + ret = __qcom_scm_pas_get_rsc_table(ctx->pas_id, input_rt_tzm, > > + input_rt_size, output_rt_tzm, > > + &size); > > + if (ret) > > + qcom_tzmem_free(output_rt_tzm); > > + > > + } while (ret == -EOVERFLOW); > > This still looks shaky (do-while is convenient for calling this twice, but > perhaps > the allocation could be moved to __qcom_scm_pas_get_rsc_table() since it's > static > anyway, and then we can just do: > > ret = __qcom_scm_pas_get_rsc_table(...) > if (ret == -EOVERFLOW) { > /* Try again with the size requested by the TZ */ > ret = __qcom_scm_pas_get_rsc_table(...) > }
Nice, Thanks., will apply., > > Other than that, it looks good (although there's still a lot of boilerplate > that we can't really get rid of with C) > > Konrad -- -Mukesh Ojha

