Message ID | 20250107101647.2087358-2-quic_gokulsri@quicinc.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | Add new driver for WCSS secure PIL loading | expand |
On Tue, Jan 07, 2025 at 03:46:40PM +0530, Gokul Sriram Palanisamy wrote: > From: Manikanta Mylavarapu <quic_mmanikan@quicinc.com> > > IPQ5332 security software running under trustzone requires metadata size. > With new command support added in TrustZone that includes a size parameter, > pass metadata size as well. This new command is specific to IPQ5332 SoC. But function 0x1a is reserved by TZ owners across the company, right? > > Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com> > Signed-off-by: Gokul Sriram Palanisamy <quic_gokulsri@quicinc.com> > --- > drivers/firmware/qcom/qcom_scm.c | 13 +++++++++++-- > drivers/firmware/qcom/qcom_scm.h | 1 + > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c > index 72bf87ddcd96..a713788926b0 100644 > --- a/drivers/firmware/qcom/qcom_scm.c > +++ b/drivers/firmware/qcom/qcom_scm.c > @@ -580,8 +580,6 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, > int ret; > struct qcom_scm_desc desc = { > .svc = QCOM_SCM_SVC_PIL, > - .cmd = QCOM_SCM_PIL_PAS_INIT_IMAGE, > - .arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_VAL, QCOM_SCM_RW), > .args[0] = peripheral, The arginfo and args are tightly coupled, so I'd prefer if you move assignment of args[0] with the assignment below (and yes duplicate it). > .owner = ARM_SMCCC_OWNER_SIP, > }; > @@ -616,6 +614,17 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, > > desc.args[1] = mdata_phys; I find this rather ugly as well, so please move (and duplicate this) as well - so we get it all gathered in one (two) place(s). > > + if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL, > + QCOM_SCM_PAS_INIT_IMAGE_V2)) { > + desc.cmd = QCOM_SCM_PAS_INIT_IMAGE_V2; > + desc.arginfo = > + QCOM_SCM_ARGS(3, QCOM_SCM_VAL, QCOM_SCM_RW, QCOM_SCM_VAL); Better leave this line unbroken. Thanks, Bjorn > + desc.args[2] = size; > + } else { > + desc.cmd = QCOM_SCM_PIL_PAS_INIT_IMAGE; > + desc.arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_VAL, QCOM_SCM_RW); > + } > + > ret = qcom_scm_call(__scm->dev, &desc, &res); > qcom_scm_bw_disable(); > > diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h > index e36b2f67607f..9aad9f92517f 100644 > --- a/drivers/firmware/qcom/qcom_scm.h > +++ b/drivers/firmware/qcom/qcom_scm.h > @@ -96,6 +96,7 @@ struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void); > > #define QCOM_SCM_SVC_PIL 0x02 > #define QCOM_SCM_PIL_PAS_INIT_IMAGE 0x01 > +#define QCOM_SCM_PAS_INIT_IMAGE_V2 0x1a > #define QCOM_SCM_PIL_PAS_MEM_SETUP 0x02 > #define QCOM_SCM_PIL_PAS_AUTH_AND_RESET 0x05 > #define QCOM_SCM_PIL_PAS_SHUTDOWN 0x06 > -- > 2.34.1 >
diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 72bf87ddcd96..a713788926b0 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -580,8 +580,6 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, int ret; struct qcom_scm_desc desc = { .svc = QCOM_SCM_SVC_PIL, - .cmd = QCOM_SCM_PIL_PAS_INIT_IMAGE, - .arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_VAL, QCOM_SCM_RW), .args[0] = peripheral, .owner = ARM_SMCCC_OWNER_SIP, }; @@ -616,6 +614,17 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, desc.args[1] = mdata_phys; + if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL, + QCOM_SCM_PAS_INIT_IMAGE_V2)) { + desc.cmd = QCOM_SCM_PAS_INIT_IMAGE_V2; + desc.arginfo = + QCOM_SCM_ARGS(3, QCOM_SCM_VAL, QCOM_SCM_RW, QCOM_SCM_VAL); + desc.args[2] = size; + } else { + desc.cmd = QCOM_SCM_PIL_PAS_INIT_IMAGE; + desc.arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_VAL, QCOM_SCM_RW); + } + ret = qcom_scm_call(__scm->dev, &desc, &res); qcom_scm_bw_disable(); diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h index e36b2f67607f..9aad9f92517f 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -96,6 +96,7 @@ struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void); #define QCOM_SCM_SVC_PIL 0x02 #define QCOM_SCM_PIL_PAS_INIT_IMAGE 0x01 +#define QCOM_SCM_PAS_INIT_IMAGE_V2 0x1a #define QCOM_SCM_PIL_PAS_MEM_SETUP 0x02 #define QCOM_SCM_PIL_PAS_AUTH_AND_RESET 0x05 #define QCOM_SCM_PIL_PAS_SHUTDOWN 0x06